目次へ

14. validation.xmlの設定

14.1. 定数

複数のルールで同じ値を使用する場合が考えられます。例えば以下のように、maskルールを用いて複数のプロパティに対して同じ正規表現を使用する場合が考えられます。

<field property="foodID" depends="mask">
  <msg name="mask" key="foodID.invalidate" />
  <var>
    <var-name>mask</var-name>
    <var-value>^[0-9]+$</var-value>
  </var>
</field>
<field property="drinkID" depends="mask">
  <msg name="mask" key="drinkID.invalidate" />
  <var>
    <var-name>mask</var-name>
    <var-value>^[0-9]+$</var-value>
  </var>
</field>

こういった場合には、定数を定義します。定数にはグローバル定数と<formset>要素内定義する定数の2種類あります。上の例をグローバル定数を用いて書き直します。

...
<form-validation>
  <global>
    <constant><!-- グローバル定数の定義 -->
      <constant-name>ID_MASK</constant-name>
      <constant-value>^[0-9]+$</constant-value>
    </constant>
  </global>

  <formset>
    <form name="menuForm">
      <field property="foodID" depends="mask">
        <msg name="mask" key="foodID.invalidate" />
        <var>
          <var-name>mask</var-name>
          <var-value>${ID_MASK}</var-value><!-- グローバル定数の参照 -->
        </var>
      </field>
      <field property="drinkID" depends="mask">
        <msg name="mask" key="drinkID.invalidate" />
        <var>
          <var-name>mask</var-name>
          <var-value>${ID_MASK}</var-value><!-- グローバル定数の参照 -->
        </var>
      </field>
    </form>
    ...
  </formset>
</form-validation>

グローバル定数は、<global>要素内で<constant>要素を用いて定義します。<global>要素は<form-validation>要素内の先頭に定義します。<constant-name>で定数名、<constant-value>でその値を定義します。複数グローバル定数を定義する場合には、その数だけ<constant>要素を<global>要素内で繰り返します。

<formset>内で定義する場合には、<formset>要素内の先頭で<constant>要素を用いて定義します。使用する要素はグローバル定数と同じです。複数定義する場合には、グローバル定数と同じく、その数だけ<constant>要素を繰り返します。

...
<formset>
  <constant><!-- グローバル定数の定義 -->
    <constant-name>ID_MASK</constant-name>
    <constant-value>^[0-9]+$</constant-value>
  </constant>
  <form name="menuForm">
  ...
  </form>
    ...
</formset>

定数の参照は${定数名}で行います。現在のところ、定数を参照できる箇所は、

  • <field>要素のproperty属性
  • <var-value>要素の値
  • <msg>要素のkey属性
  • <arg0>〜<arg3>要素のkey属性(<arg0>〜<arg3>要素については後述)

の4つだけです。またグローバル定数は設定ファイル内全てで参照できるのに対して、<formset>要素内に定義した定数は定義した<formset>要素内でしか参照できません。

(実習課題1)

13章の実習課題2のWebアプリケーションを改良しなさい。

  • minlength, maxlengthの境界値となる長さを、グローバル定数を用いて指定しなさい。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp