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アプリケーションを改良しなさい。
- 発注商品を入力するテキストボックスを追加する。
- 支払い方法を選択するセレクトボックスを追加する。セレクトボックスの項目は任意だが、「クレジットカード払い」の項目を含めること。
- 発注商品を入力し、かつ支払い方法で「クレジットカード払い」を選択した場合のみ、クレジットカード番号の入力を必須にすること。