エラーメッセージ

続いて、作ったルールを Validator 設定に追加する。
別にファイルを用意してもよかったのだが、
とりあえず /WEB-INF/validation.xml に追記しよう。

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

    <global>
   
        <validator name="filterNetwork"
                classname="jp.loafer.test.validators.FilterNetworkValidator"
                method="execute"
                methodParams="
                        java.lang.Object,
                        org.apache.commons.validator.Field,
                        org.apache.struts.action.ActionMessages
                "
                msg="errors.invalid"  />
   
    </global>

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

ルールは <validator> 要素で定義する。
ルール名は「filterNetwork」とし、name 属性で指定する。

次に、classname、method、methodParams 属性で、
メソッドのシグネチャを指定する。

そして、msg 属性で、既定のメッセージのキーを指定する。
まあ、現時点では使っていないのだが、
いずれちゃんと実装しなければならないので用意しておく。
無効な値を示す汎用のメッセージ「errors.invalid」とした。

では、このルールをプロパティに適用してみる。

========== /WEB-INF/validation.xml ==========
(…省略…)
            <!-- 発信アドレス -->
            <field property="rule.source.network"
                    depends="required,filterNetwork">

                <arg name="required" position="0"
                        key="property.FilterRule.source.network" />
                <arg name="filterNetwork" position="0"
                        key="property.FilterRule.source.network" />
   
            </field>

            <!-- 宛先アドレスは必須で * か address[/cidr] -->
            <field property="rule.destination.network"
                    depends="required,filterNetwork">

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

            </field>

(…省略…)
========== end of /WEB-INF/validation.xml ==========

ルールの使い方は他のものと大差ない。
<field> 要素の depends 属性に並べ、
適切なキーを指定するだけだ。

繰り返しになるが、<arg> 要素を指定しても、
現実装では使われていないので意味がないが、
ちゃんと実装するとこれが使われるので先に用意しておく。

では、実行してみよう。

値が入っている発信アドレスは、
required ルールに適合したが、
filterNetwork ルールが常にエラーになるため、
「値が正しくありません」と用意したメッセージが表示された。

値が空である宛先アドレスは、
required ルールに適合しないため、
filterNetwork ルールには適合するので、
「宛先アドレスを入力してください。」と表示された。