目次へ

13.2. byte, short, integer, long, float, double, intRange, floatRangeルール

「byte」「short」「integer」「long」「float」「double」ルールは、いずれも入力された値が特定の型の変数で表せる数値かどうか検証します。入力された文字列が数値列でなければならないのはもちろんのことですが、例えばintegerルールの場合、int型変数で表せる数値である必要があります。つまり極端に大きい整数であったり、浮動小数点数は検証エラーとなります。

「intRange」「floatRange」ルールは、文字列が数値列であるだけでなく、指定した範囲内の数値か検証します。範囲は「min」「max」変数を<var>要素内に定義することで指定します。なお前者が最小値、後者が最大値を表します。以下は入力文字列が0以上10以下のint型整数かどうか判定しています。intRange, floatRangeにおいて、片方または両方の変数を省略することはできません。

<field property="num" depends="intRange">
  <msg name="intRange" key="num.invalidate" />
  <var>
    <var-name>min</var-name>
    <var-value>0</var-value>
  </var>
  <var>
    <var-name>max</var-name>
    <var-value>10</var-value>
  </var>
</field>

注意点ですが、これらのルールは空文字列に対してチェックが行われません。もし入力が必須でかつ整数の入力を求める場合には、requiredと組み合わせて使用します。またrequiredおよびrequiredif(後述)と組み合わせて使用する場合には、これらのルールを後にrequired, requiredifルールを先に記述するようにしてください。required, requiredifルールが動作しなくなるからです。以下の例もintegerルールを先に記述するとrequiredルールが動作しません。

<field property="num" depends="required,integer">
  <msg name="required" key="num.required" />
  <msg name="integer" key="num.invalidate" />
</field>

もう1つ注意点ですが、検証はActionFormのプロパティ値に対して行われます。つまりHTTPリクエストの値が、StrutsによってActionFormのプロパティに設定された後、プロパティの値に対して検証が実行されます。従って型がintであるプロパティに、integerルールを適応しても意味がありません。int型プロパティには、必ずint型数値が設定されるためです。

(実習課題1)

以下のWebアプリケーションを作成しなさい。

  • Stringとint型のプロパティを持つActionFormに、テキストフィールドから入力した値を設定する。
  • ActionFormのプロパティに対して、integerルールで検証を行う。
  • 検証をクリアした場合には、ActionFormの値を表示する。
  • int型のプロパティにintegerルールを適応しても意味が無いことを確認すること。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp