2007 年 4 月 21 日 23 時 58 分

検証にメッセージリソースを使う


このアーカイブは同期化されません。 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 コンストラクタの第一引数として、
メッセージリソースのキーを渡すだけで、
そのキーを読み出してエラーメッセージを設定してくれる。
そのため、今回の修正は非常に簡単だ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.