このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
Validator 設定ファイルの基本は、
検証条件を表すフォームを定義することだ。
例を示した方が速いな。
========== /WEB-INF/validation.xml ==========
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<form-validation>
<formset>
<form name="filterRuleForm">
<!-- 発信アドレスは必須-->
<field property="rule.source.network"
depends="required" />
<!-- 発信ポートは必須-->
<field property="rule.source.port"
depends="required" />
</form>
</formset>
</form-validation>
========== end of /WEB-INF/validation.xml ==========
<form> 要素はルート要素内に、直接書けないので、
必ず <formset> でグループ化して記述する。
<form> 要素の name 属性にはフォームの名前を指定する。
ここで指定する名前は、ValidatorForm のクラス名ではなく、
Struts 設定ファイルで定義した <form-bean> の名前となる。
Struts Validator は、この名前を元に、
検証条件と ValidatorForm のインスタンスを結びつける。
<form> の内容には、任意の数の <field> 要素が含まれる。
個々の <field> 要素は、フォームの特定のプロパティ値が、
満たさなければならない条件を表している。
property 属性で、対象となるプロパティ名を指定する。
タグライブラリでよく見た property 属性と同じ形式だ。
depends 属性は、値の「ルール」を示す。
ここで指定できるルールの名前は、
Struts Validator によって定義されているものである。
「required」ルールは、値の入力が必須であることを示し、
プロパティの値には 1 文字以上の入力が必要となる。
さて、上記の指定だけで、filterRuleForm の、
rule.source.network と rule.source.port に対して、
自動的に入力チェックがかかるようになる。
どのような結果になるか、実際に試してみよう。
まず、edit-rule.jsp でエラーメッセージを表示するため、
<html:messages> 要素を追加しておく。
========== /WEB-INF/pages/filter/edit-rule.jsp ==========
(…省略…)
<html:form action="/filter/update-rule">
<!-- エラーメッセージ開始 -->
<ul>
<html:messages id="msg">
<font color="red">
<li><bean:write name="msg" /></li>
</font>
</html:messages>
</ul>
<!-- エラーメッセージ終了 -->
<div>
<html:hidden property="index" />
</div>
(…省略…)
========== end of /WEB-INF/pages/filter/edit-rule.jsp ==========
では、これでルールの追加画面を開き、
発信系の入力ボックスを空欄にして「OK」を押す。
ん? どうやら、エラーメッセージ自体がエラーのようだ。
ERROR: Resource key "errors.required" not found in default bundle
ERROR: Resource key "errors.required" not found in default bundle
空欄のままで OK すれば、2 つのエラーが表示され、
片方が空欄なら 1 つのエラーが表示される。
もし、両方空欄でなければ問題なく成功している。
とりあえず、検証が行われていることは間違いないようだ。