このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
続いて、作ったルールを 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 ルールには適合するので、
「宛先アドレスを入力してください。」と表示された。