- 14.1. 定数
- 14.2. 変数
- 14.3. デフォルトのエラーメッセージ
- 14.4. indexedListProperty
14.2. 変数
intRangeルールやminlengthルールでは、<var>要素を用いて数値の範囲や文字列の長さを設定していました。定数と同じく、この値を他の箇所で参照することができます。例えばエラーメッセージの表示に、maxlengthルールで指定した文字列の長さを渡したい場合が考えられます。
まず変数の参照について説明する前に、メッセージの表示に、任意の値を渡す方法について説明します。Beanタグライブラリのmessageタグと同じように、メッセージがjava.text.MessageFormatの形式に従う場合に、そのパラメータに値をセットすることができます。例えばメッセージが
{0}は長さ{1}以下の文字列でなければなりません。
となっていた場合、{0}〜{2}のパラメータに値をセットすることができます。<arg0>〜<arg3>要素は、パラメータに値をセットするためのものです。それぞれ<arg0>が{0}に、<arg1>が{1}に対応しています。<arg0>〜<arg3>要素は、<field>要素内で<msg>要素の後、<var>要素の前に定義します。例えば以下のようになります。
<field property="name" depends="maxlength"> <msg name="maxlength" key="name.invalidate" /> <arg0 name="maxlength" key="name" /> <arg1 name="maxlength" key="10" resource="false" /> <var> <var-name>maxlength</var-name> <var-value>10</var-value> </var> </field>
<arg0>〜<arg3>要素の各属性の意味は次の通りです。
属性名 | 説明 |
---|---|
name |
対応する検証ルールを指定。<field>要素のdepends属性に指定されているものから1つ選択する。対応する<msg>要素のname属性の値と同じにしなければならない。 |
key |
リソースバンドルから検索する際のキーを指定。検索されてきた値が、メッセージのパラメータにセットされる。ただし次のresource属性の値がfalseである場合には、指定された値がそのままメッセージのパラメータにセットされる。 |
resource |
リソースバンドルを使用するかどうか指定。falseの場合には使用せず、key属性で指定された値が、そのままメッセージのパラメータにセットされる。trueの場合には使用される。デフォルトはtrue。 |
例の場合には、パラメータ{0}にはリソースバンドルからnameで検索してきた値が、パラメータ{1}には10がセットされます。
続いて<var>要素で定義した変数の参照について説明します。上記の例にも言えますが、検証ルールに渡すために定義した変数の値を、メッセージのパラメータにセットしたい場合が考えられます。変数の参照は、${var:変数名}の形式で行います。上記の例は、以下のように書き換えることができます。
<field property="name" depends="maxlength"> <msg name="maxlength" key="name.invalidate" /> <arg0 name="maxlength" key="name" /> <arg1 name="maxlength" key="${var:maxlength}" resource="false" /> <var> <var-name>maxlength</var-name> <var-value>10</var-value> </var> </field>
${var:maxlength}で参照を行っており、対応する<var>要素で定義されている10がセットされます。なお変数の参照を行える箇所は、定数と同じく
- <field>要素のproperty属性
- <var-value>要素の値
- <msg>要素のkey属性
- <arg0>〜<arg3>要素のkey属性
です。また変数が定義されている<field>要素内でしか参照することはできません。
(実習課題2)
13章の実習課題2のWebアプリケーションを改良しなさい。
- エラーメッセージに長さの情報も与えるようにしてください。(エラーメッセージの例:「3桁以下の数値にしてください」)
- またエラーメッセージに与える長さの情報は、validation.xmlで指定すること。また変数を用いて指定すること。