2007 年 5 月 12 日 23 時 51 分

Validator 設定 #4: mask ルールと var 要素


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


今日は mask ルールだ。

このルールは非常に柔軟性が高く、
フィールドの値を正規表現で制限することができる。
これは文字列型のプロパティの検証として最適と言える。

例えば、ルールの処理は、allow か deny の値を取るので、
これを正規表現「^(?:allow|deny)$」で表すことができる。

では、Validator の設定に追加してみよう。

========== /WEB-INF/validation.xml ==========
(…省略…)
            <!-- 処理は必須で deny か allow -->
            <field property="rule.action"
                    depends="required, mask">

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

                <var>
                    <var-name>mask</var-name>
                    <var-value>^(?:allow|deny)$</var-value>
                </var>

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

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

だんだんと複雑になってきたな。

まず、単純な required ルールと違い、
mask ルールには、正規表現というパラメータが存在する。

パラメータを必要とするルールに値(変数)を渡すためには、
<var> 要素を追加して指定する。
<var> 要素も、<field> 要素の子として追加する。

<var> 要素には、<var-name> と <var-value> 要素を、
「この順に」指定する。
<var-name> は変数の名前、<var-value> がその値だ。

mask ルールが必要とする変数は、
そのままの名前である「mask」変数で、
その値として、値が取り得る条件を示す正規表現を渡す。

次に、<field> 要素の depends 属性だが、
ここには複数のルールを指定することができ、
その場合は、カンマで区切って指定する。

mask の正規表現は空文字列にマッチングしないので、
required ルールと組み合わせているのは無駄に見えるが、
これにはちゃんと意味がある。

Struts Validator では空文字列は特別扱いされており、
required ルール以外のルールでは「有効」とみなされる。
データベースの NULL 許容フィールド等と相性がよく、
アプリケーションの設計が楽になるからである。

そのため、入力が必須なフィールドでは、
これらルールを組み合わせる必要があるのだ。

さて、mask ルールが使う書式メッセージは、
既定で「errors.invalid」というキーを参照するので、
それを用意しておこう。

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

# Validator 関係

errors.required = {0}を入力してください。
errors.required.selection = {0}を選択してください。
errors.invalid = {0}が正しくありません。

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

これで、不正な値を入力した場合も、
「処理が正しくありません。」と、
エラーメッセージが表示されるようになった。

もし、エラーメッセージに、値が正しくない条件等を含め、
もう少し詳細なメッセージを表示したいのであれば、
「{0}が正しくありません。{1}」等とし、
{1} の値を <arg> 要素の position="1" で指定するなど、
メッセージの設計は自由である。



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