●日付書式の妥当性検証
日付書式の妥当性検証に使うdateバリデータはさほど難しいというものではないのですが、
書き方のテンプレートということでここに一緒にメモっておきます。
<form name="MyForm">
<field property="startDate" depends="required,date">
<arg0 key="startDate.displayName"/>
<var><var-name>datePattern</var-name><var-value>yyyyMMdd</var-value></var>
</field>
</form>
|
●maskバリデータ
よく使われるバリデータとしては必須入力チェックをするrequired、
データ型チェックをするintegerなどがありますが、
もう少し複雑なバリデータとしてmaskが便利に使えます。
これは入力値が指定した正規表現に適合すればOK、そうでなければNGとするバリデータです。
以下の例に示すように、maskバリデータにはmaskという変数を必ず定義し、
その中に照合する正規表現を記述します。
「\」を二重に書いたりする必要はありません。
<form name="FormBeanKikanExample">
<field property="startDate" depends="mask">
<msg name="mask" key="error.mask.generic.date"/>
<arg0 key="kikan.startDate.displayName"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9][0-9][0-9][0-9][\-\/]?[0-9][0-9][\-\/]?[0-9][0-9]$</var-value>
</var>
</field>
...
</form>
|
今までの例には載せませんでしたが、msgタグを使うと、
エラーメッセージのキー値(メッセージ・リソースのキー)を指定できます。
●validwhenバリデータ
もうひとつ、頻繁に必要になる検証方法が、
複数の入力項目の関連です。例えば、ある項目が入力されていたら別の入力項目も必須だったり、
といったものです。
validwhenバリデータは、ある入力項目と他の入力項目の関連を、
Java言語の条件式風の書式で指定することができます。
下の例は、startDateとendDateという2つの入力項目があるとして、
startDateに何か値が入力されていたら、endDateにも必ず値を入力しなければいけない、
という規則を書いたものです。
*this*は、ここで注目している入力項目、つまりendDateのことを指します。
すると条件式の意味は簡単に理解できると思います。
<form name="FormBeanKikanExample">
<field property="endDate" depends="validwhen">
<msg name="mask" key="error.mask.generic.period"/>
<arg0 key="kikan.endDate.displayName"/>
<var>
<var-name>test</var-name>
<var-value>((startDate == null) or (*this* != null))</var-value>
</var>
</field>
...
</form>
|
●定数の定義
maskバリデータで、同じ正規表現をたくさんのフォームアクションBeanのたくさんの入力項目に適用したい場合、
定数を1か所で定義して集中管理すると保守性が上がります。
それにはconstantタグを下のように使います。
定義した定数はJSTLのように、 ${定数名}で参照できます。
<formset>
<constant>
<constant-name>dateformat</constant-name>
<constant-value>^[0-9][0-9][0-9][0-9][\-\/]?[0-9][0-9][\-\/]?[0-9][0-9]$</constant-value>
</constant>
....
<form name="FormBeanKikanExample">
<field property="startDate" depends="mask">
<msg name="mask" key="error.mask.generic.date"/>
<arg0 key="kikan.startDate.displayName"/>
<var>
<var-name>mask</var-name>
<var-value>${dateformat}</var-value>
</var>
</field>
</form>
</formset>
|
●その他のリソース
最後に、上の例で出てきたメッセージリソースと、サンプル用の入力フォームです。
error.mask.generic.date=日付の書式が不適正です:{0}
error.mask.generid.period=期間指定が不適正です:{0}
kikan.startDate.displayName=開始日
kikan.endDate.displayName=終了日
|
<%@ page contentType="text/html;charset=Windows-31J" language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:html locale="true">
<head><title>validatorのテスト(期間)</title><html:base/></head>
<body bgcolor="white">
<html:errors/>
<html:form action="/ActionKikanExample" focus="startDate">
データ抽出期間:
<html:text property="startDate" size="16" maxlength="10"/>〜
<html:text property="endDate" size="16" maxlength="10"/><br>
<html:submit value="検索"/>
</table>
</html:form>
<html:img page="/struts-power.gif" alt="Powered by Struts"/>
</body>
</html:html>
|
(first uploaded 2004/03/21 last updated 2005/04/28, URANO398)
|