このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
メッセージリソースを使いだしたので、
検証エラーのメッセージにもリソースを使ってみよう。
現在メッセージは ActionForm に直接記述しているので、
このままでは多言語化することはできない。
そのため、メッセージをプロパティファイルに移し、
それを参照するような形に修正する。
========== Messages_ja.properties ==========
# エラーメッセージ
errors.FilterInfo.note.required = \
備考を入力してください。
errors.FilterInfo.defaultAction.required = \
既定の処理を選択してください。
errors.FilterInfo.defaultAction.invalid = \
既定の処理の値が不正です。
# プロパティ値
value.action.allow = 許可
value.action.deny = 拒否
========== end of Messages_ja.properties ==========
次に、このメッセージを参照するように、
ActionForm#validate を書き換える。
========== FilterInfoForm#validate ==========
@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
String defaultAction = info.getDefaultAction();
String node = info.getNote();
if (node == null || node.length() == 0) {
ActionMessage m =
new ActionMessage(
"errors.FilterInfo.note.required");
errors.add("info.note", m);
}
if (defaultAction == null
|| defaultAction.length() == 0) {
ActionMessage m =
new ActionMessage(
"errors.FilterInfo.defaultAction.required");
errors.add("info.defaultAction", m);
} else if (!defaultAction.equals("allow")
&& !defaultAction.equals("deny")) {
ActionMessage m =
new ActionMessage(
"errors.FilterInfo.defaultAction.invalid");
errors.add("info.defaultAction", m);
}
if (!errors.isEmpty()) return errors;
return super.validate(mapping, request);
}
========== end of FilterInfoForm#validate ==========
ActionMessage はメッセージリソースに対応している。
寧ろ、ActionMessage のコンストラクタを見れば分かるが、
文字列を直接指定する方法は一般的でなく、
通常、メッセージリソースを参照する方法が使われる。
ActionMessage コンストラクタの第一引数として、
メッセージリソースのキーを渡すだけで、
そのキーを読み出してエラーメッセージを設定してくれる。
そのため、今回の修正は非常に簡単だ。