目次へ

13.5. required, requiredifルール

これまでに説明したルールは、いずれも入力があった場合(プロパティが空文字列でなかった場合)に検証を行うものでした。「required」「requiredif」ルールは、入力があったかどうか検証を行うルールです。他のルールと組み合わせて使うことによって、より複雑な検証を行うことができます。

requiredルールは、値が設定されているかどうか検証を行います。例えばdateルールと組み合わせて使用すると、そのプロパティには必ず日付フォーマットに従った値を設定しなければならなくなります。

<field property="birthday" depends="required,date">
  <msg name="required" key="birthday.required" />
  <msg name="date" key="birthday.invalidate" />
</field>

requiredifルールは、指定した条件に合致した場合に、値が設定されているかどうか検証を行います。例えば「name」プロパティに値が入力されている場合には、「kana」プロパティの入力も必須にする場合等に使用します。この例を表す設定を以下に示します。

<field property="kana" depends="requiredif">
  <msg name="requiredif" key="kana.required" />
  <var>
    <var-name>field[0]</var-name>
    <var-value>name</var-value>
  </var>
  <var>
    <var-name>fieldTest[0]</var-name>
    <var-value>NOTNULL</var-value>
  </var>
</field>

requiredifルールで指定する変数は「field」「fieldTest」「fieldValue」「fieldIndex」「fieldJoin」の5種類です。この内、field, fieldTest, fieldValue, fieldIndexは配列変数で、0番目から順に指定していきます。以下に変数についてまとめます。

field 条件の対象となるプロパティを指定
fieldTest 条件を指定
fieldValue 条件がEQUALであった場合に、比較対象の値を指定
fieldIndex <field>要素のindexedListPropertyと組み合わせて使用
fieldJoin

複数条件があった場合、それらをAND, ORのいずれで結合するか指定

field変数は必須で、条件の対象となるプロパティを指定します。field変数は配列で、0番目から順に使用しますので、

<var>
  <var-name>field[0]</var-name>
  <var-value>name</var-value>
</var>

となります。この例では、nameプロパティを条件の対象として指定しています。

次にfieldTest変数を指定します。field変数とfieldTest変数は必須です。fieldTest変数には、同じインデックスのfield変数で指定したプロパティに対する条件を指定します。つまり「field[0]」で指定したプロパティに対する条件は「fieldTest[0]」で、「field[1]で指定したプロパティに対する条件は「fieldTest[1]」で指定します。指定できる条件は以下の3種類です。

NULL fieldで指定したプロパティがnull
NOTNULL fieldで指定したプロパティがnullでない
EQUAL fieldで指定したプロパティが、fieldValue変数で指定した値に等しい

EQUALを条件に指定した場合には同じインデックスのfieldValue変数で、比較対象の値を指定します。以下は「name」プロパティがNOTNULLで、「age」プロパティが20に等しいという条件を示したものです。

<var>
  <var-name>field[0]</var-name>
  <var-value>name</var-value>
</var>
<var>
  <var-name>fieldTest[0]</var-name>
  <var-value>NOTNULL</var-value>
</var>
<var>
  <var-name>field[1]</var-name>
  <var-value>age</var-value>
</var>
<var>
  <var-name>fieldTest[1]</var-name>
  <var-value>EQUAL</var-value>
</var>
<var>
  <var-name>fieldValue[1]</var-name>
  <var-value>20</var-value>
</var>

最後にfieldJoinについて説明します。fieldIndexedについては、次章で<field>要素のindexedListPropertyとあわせて説明します。fieldJoinは複数条件を指定した場合に、それらをANDでつなげるか、ORでつなげるか指定するものです。指定できる値を以下の表に示します。

AND 全ての条件を満たしている場合に検証を行う
OR どれか1つの条件を満たしている場合に検証を行う

先ほどの例に、

<var>
  <var-name>fieldJoin</var-name>
  <var-value>AND</var-value>
</var>

を加えると、nameプロパティが入力されていてageプロパティが20に等しい場合、requiredifルールの対象となっているプロパティは必須となります。逆にOR条件をつけると、nameプロパティが入力されているか、ageプロパティが20に等しい場合、requiredifルールの対象となっているプロパティは必須となります。

(実習課題5)

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

  • 発注商品を入力するテキストボックスを追加する。
  • 支払い方法を選択するセレクトボックスを追加する。セレクトボックスの項目は任意だが、「クレジットカード払い」の項目を含めること。
  • 発注商品を入力し、かつ支払い方法で「クレジットカード払い」を選択した場合のみ、クレジットカード番号の入力を必須にすること。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp