2007 年 5 月 11 日 23 時 54 分

Validator 設定 #3: msg 要素


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真]


値の入力が必須である項目はほかにもあるので、
それらにも required ルールを適用してみよう。

備考以外は全て必須項目なので、required を適用できる。
プロトコルは String[] なので、ちょっと置いておき、
型が String である以下のプロパティに使ってみよう。

・rule.action
・rule.source.network
・rule.source.port
・rule.destination.network
・rule.destination.port

これらを昨日と同じように登録すれば、
恐らく以下のようなエラーメッセージになるはずだ。

・処理を入力してください。
・発信アドレスを入力してください。
・発信ポートを入力してください。
・宛先アドレスを入力してください。
・宛先ポートを入力してください。

まあ、これでも構わないのだが、
処理の項目は、「入力」というより、「選択」に近い。
そこで、この項目に関しては、
「処理を選択してください。」という風にしたい。

しかし、このメッセージは、errors.required キーに、
「{0}を入力してください。」と指定されているため、
{0} の部分しか置き換えることができない。

こういう場合は、<msg> 要素を利用する。
<msg> 要素を追加することで、
書式の基本となるメッセージのキーを明示し、
別のものを利用することができる。

逆に言うと、<msg> を指定しない場合、
ルールに基づいた既定値が使われるということでもある。

では、「選択」で使うためのメッセージを用意しよう。
キーは何でもいいのだが、選択が必須ということで、
errors.required.selection としておこう。

========== Messages_ja.properties ==========

# Validator 関係

errors.required = {0}を入力してください。
errors.required.selection = {0}を選択してください。

# プロパティ名

property.FilterRule.action = 処理
property.FilterRule.protocols = プロトコル
property.FilterRule.source.network = 発信アドレス
property.FilterRule.source.port = 発信ポート
property.FilterRule.destination.network = 宛先アドレス
property.FilterRule.destination.port = 宛先ポート
property.FilterRule.note = 備考

(…省略…)
========== end of Messages_ja.properties =========

では、Validator 設定ファイルを書く。

========== /WEB-INF/validation.xml ==========
(…省略…)
        <form name="filterRuleForm">

            <!-- 処理は必須-->
            <field property="rule.action"
                    depends="required">

                <msg name="required"
                        key="errors.required.selection" />

                <arg name="required" position="0"
                        key="property.FilterRule.action" />

            </field>

            <!-- 発信アドレスは必須 -->
            <field property="rule.source.network"
                    depends="required">
               
                <arg name="required" position="0"
                        key="property.FilterRule.source.network" />

            </field>

            <!-- 発信ポートは必須 -->
            <field property="rule.source.port"
                    depends="required">

                <arg name="required" position="0"
                        key="property.FilterRule.source.port" />

            </field>

            <!-- 宛先アドレスは必須 -->
            <field property="rule.destination.network"
                    depends="required">

                <arg name="required" position="0"
                        key="property.FilterRule.destination.network" />

            </field>

            <!-- 宛先ポートは必須 -->
            <field property="rule.destination.port"
                    depends="required">

                <arg name="required" position="0"
                        key="property.FilterRule.destination.port" />

            </field>
       
        </form>
(…省略…)
========== end of /WEB-INF/validation.xml ==========

長くなったが、これは横幅を短くして折り返しているからで、
エディタ等で見る限りはそれほどではないはずだ。

<msg> 要素は、<field> 要素の子として追加する。
<field> 要素内での順番は自由なので、
<arg> の前でも後ろでも構わない。

<arg> と同じく、name 属性はルールの名前であり、
<field> 要素の depends 属性で指定したルールと合わせる。
key 属性が、基本となる書式メッセージが格納された、
メッセージリソースのキーとなる。

では、エラーメッセージを表示させてみよう。
処理はラジオボタンなので、既定で選択されてしまうが、
JavaScript で解除・直接送信するなどの方法で回避できる。

http://localhost:8080/struts-test/filter/update-rule.do?rule.action=&rule.source.network=&rule.source.port=&rule.destination.network=&rule.destination.port=

ちゃんと表示されることが確認された。



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