本日のテーマは、引き続きTerasolunaフレムワークのバリデーションチェックサンプルを掲載します。
Terasolunaは事前に数種類の範囲チェックルールを設け、必要の場合、それらのチェックルールを組み込むだけで項目の範囲チェック機能を持たせる。
では、数値範囲チェック、バイト数範囲チェック、日付範囲チェックの例を挙げながら、説明します。
※ちなみに、今日は頭痛のため、あまり考えずに本記事を作成しました。間違いところがあれば、ご指摘ください。
先ず、数値範囲チェック(int,float,double):
①整数数値範囲(int)
・JSPコード
<html:text name=""_commonForm"" property=""t10_1_intRange"" size=""50"" maxlength=""25"" errorStyleClass=""error-input"" />
・xxx-validation.xmlチェックルールのコード:
<!-- 10_1.整数数値範囲チェック -->
<form name=""/v10_1CheckAction"">
<field property=""t10_1_intRange""
depends=""intRange"">
<arg key=""整数数値範囲"" resource=""false"" position=""0""/>
<arg key=""${var:min}"" resource=""false"" position=""1""/>
<arg key=""${var:max}"" resource=""false"" position=""2""/>
<var>
<var-name>min</var-name>
<var-value>1</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>99</var-value>
</var>
</field>
</form>
上記、フィールドt10_1_intRange(property=""t10_1_intRange"")に対して、整数範囲チェックルール(depends=""intRange"")を設定しました。数値範囲は1~99とする。
サンプルを実行すると、下記のようなイメージです。
②float数値範囲(float)
float数値チェックは小数点以下7桁までチェックできます。実際の開発中で精度をそこまで検証するケースは稀だと思いますが、一応頭に置いといてください。
・JSPコードを省略します。
・xxx-validation.xmlでfloat数値範囲チェックの検証コード:
<!-- 10_2.Float型の数値範囲チェック -->
<form name=""/v10_2CheckAction"">
<field property=""t10_2_floatRange""
depends=""floatRange"">
<arg key=""Float型数値範囲"" resource=""false"" position=""0""/>
<arg key=""${var:min}"" resource=""false"" position=""1""/>
<arg key=""${var:max}"" resource=""false"" position=""2""/>
<var>
<var-name>min</var-name>
<var-value>1.0</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>100.0</var-value>
</var>
</field>
</form>
これで1.0~100.0までのfloat数値範囲チェックを組み込まれました。
先ほど言った通りに、精度は小数点7桁ですので、100.0000001は範囲外となり、100.00000009は範囲内です。(はず)
実際のイメージは下記となります。
③double型数値範囲チェック(double)
いきなりですが、xxx-validation.xmlの検証ルールコード:
<!-- 10_3.Double型の数値範囲チェック -->
<form name=""/v10_3CheckAction"">
<field property=""t10_3_doubleRange""
depends=""doubleRange"">
<arg key=""Double型数値範囲"" resource=""false"" position=""0""/>
<arg key=""${var:min}"" resource=""false"" position=""1""/>
<arg key=""${var:max}"" resource=""false"" position=""2""/>
<var>
<var-name>min</var-name>
<var-value>1.0</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>100.0</var-value>
</var>
</field>
</form>
先ほどのfloat型の範囲チェックと似ています。唯一の違いは、精度です。double型の精度は小数点以下15桁です。
イメージ:
それでは、
バイト数範囲チェックルールに進みます。
ご存知の通りに、バイト数は文字コードによって変わります。なので、バイト数範囲チェックの際に文字コード指定してください。指定しないと、VMのデフォルト文字コードとなります。
この例では、入力テキストと入力テキストエリアの2つのフィールドで検証します。理由は改行コードなども検証したいため。
コードはこれ:
<!-- 11.バイト数範囲チェック -->
<form name=""/v11CheckAction"">
<field property=""t11"" depends=""byteRange"">
<arg key=""入力テキスト"" resource=""false"" position=""0"" />
<arg key=""${var:minByte}バイト"" resource=""false"" position=""1"" />
<arg key=""${var:maxByte}バイト"" resource=""false"" position=""2"" />
<var>
<var-name>minByte</var-name>
<var-value>4</var-value>
</var>
<var>
<var-name>maxByte</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>encoding</var-name>
<var-value>Windows-31J</var-value>
</var>
</field>
<field property=""t11_textarea"" depends=""byteRange"">
<arg key=""入力テキストエリア"" resource=""false"" position=""0"" />
<arg key=""${var:minByte}"" resource=""false"" position=""1"" />
<arg key=""${var:maxByte}"" resource=""false"" position=""2"" />
<var>
<var-name>minByte</var-name>
<var-value>4</var-value>
</var>
<var>
<var-name>maxByte</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>encoding</var-name>
<var-value>Windows-31J</var-value>
</var>
</field>
</form>
これで、入力フィールドに入力できるバイト数範囲は4~10と指定しました。漢字だと、2文字~5文字です。改行も2バイトとカウントしますので、ご注意ください。
最後、
日付範囲チェックの例です。
Terasolunaで日付チェックはdateチェックとdate厳密チェックを2つ範囲チェックができます。
datePatternチェックは緩いチェック、datePatternStrictチェックは厳密チェックです。
つかり、datePattern=""yyyy/MM/dd""を指定したら、2000/01/01か、2000/1/1にも関わらず、日付であれば、すべてOKです。
一方、厳密チェックのdatePatternStrict=""yyyy/MM/dd""を指定する場合、2000/1/1入力したら、エラーとなります。
注意すべきところは、同じフィールドにdatePatternとdatePatternStrictを同時に指定した場合、datePatternの指定は優先となります。
では、xxx-validation.xmlのコードです。
<!-- 14.日付範囲チェック -->
<form name=""/v14CheckAction"">
<field property=""t14""
depends=""dateRange"">
<arg key=""日付範囲(指定フォーマット)"" resource=""false"" position=""0""/>
<arg key=""${var:startDate}"" resource=""false"" position=""1""/>
<arg key=""${var:endDate}"" resource=""false"" position=""2""/>
<var>
<var-name>startDate</var-name>
<var-value>2000/01/01</var-value>
</var>
<var>
<var-name>endDate</var-name>
<var-value>2010/12/31</var-value>
</var>
<var>
<var-name>datePattern</var-name>
<var-value>yyyy/MM/dd</var-value>
</var>
</field>
<field property=""t14_strict""
depends=""dateRange"">
<arg key=""日付範囲(厳密チェック)"" resource=""false"" position=""0""/>
<arg key=""${var:startDate}"" resource=""false"" position=""1""/>
<arg key=""${var:endDate}"" resource=""false"" position=""2""/>
<var>
<var-name>startDate</var-name>
<var-value>2000/01/01</var-value>
</var>
<var>
<var-name>endDate</var-name>
<var-value>2010/12/31</var-value>
</var>
<var>
<var-name>datePatternStrict</var-name>
<var-value>yyyy/MM/dd</var-value>
</var>
</field>
</form>
上記、フィールドt14は2000/01/01~2010/12/31間の日付を入力すれば、エラーにならない。
フィールドt14_strictにも2000/01/01~2010/12/31の範囲ですが、2005/1/1のような日付入力したら、エラーになると覚えてください。
イメージ:
以上、本日のテーマでした。
筆者は在日中国人です。今までは主にWeb系のシステム開発をしてきました。
Terasolunaの実際開発経験が0ですが、Struts、Springとibatis、いわゆるSSIの開発案件がいくつの経験がありました。
IT技術について、これからもこのサイトを通じて発信していきたいと思いますので、ご応援ください。
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
zanmai @2016年03月31日
» ①②③④の順で設定できるはず。…