目次へ

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で指定すること。また変数を用いて指定すること。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ