2007 年 5 月 9 日 23 時 59 分

Validator 設定 #1: 最小の定義


このアーカイブは同期化されません。 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 つのエラーが表示される。
もし、両方空欄でなければ問題なく成功している。

とりあえず、検証が行われていることは間違いないようだ。



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