TOP > Struts > アクションフォーム(DynaValidatorForm)
Struts アクションフォーム(DynaValidatorForm)
Strutsで入力されたデータの検証(入力チェック)を行なうのにソースを作成せず、
いくつかのファイルの記述のみで対応できるアクションフォーム(DynaValidatorForm)に
関するファイルの設定、チェッククラスの拡張等を説明します。
■struts-config.xmlの設定
Strutsの入力検証でチェックするメッセージファイルを説明します。
これ以降に説明するstruts-config.xmlはアクションフォームの設定を抜粋した内容となっています。
<message-resources parameter="property.MessageResources" null="false/>
|
上記の設定でStrutsの入力検証で使用するメッセージの設定が行なわれました。
WEB-INF/classes/配下に「property/MessageResources.properties」が存在することとなります。
MessageResources.propertiesはキーとメッセージが対になっています。
属性の概要は下記の一覧を参照してください。
|
■
message-resourcesタグ
|
|
parameter
|
メッセージファイルの配置ディレクトリ、ファイル名を指定します。
|
|
null
|
メッセージが存在しない場合の処理を指定します。
上記ではfalseを指定しているため、エラーとなります。
|
次にStrutsのDynaValidatorFormが有効になるようにプラグインを設定します。
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
|
上記の設定でValidatorPlugInにvalidator-rules.xmlとvalidation.xmlのパスの設定をしています。
パスを指定したStrutsの各xmlの概要は下記の一覧を参照してください。
|
■
Strutsの設定ファイル
|
|
validator-rules.xml
|
入力検証を行なうルールを定義している
|
|
validation.xml
|
実際にアクションフォームがどの入力検証をするかを記述している
|
次に個々のStrutsアクションフォームが取得する項目名と項目の型を指定します。
<form-beans>
<form-bean name="formName" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="userName" type="java.lang.String"/>
<form-property name="address" type="java.lang.String"/>
</form-bean>
</form-beans>
|
上記は個別のStrutsアクションフォームを表し、フォームごとにform-beanタグが存在します。
この設定でリクエストデータを取得することができます。属性の概要は下記の一覧を参照してください。
|
■
form-beanタグ
|
|
name
|
アクションフォームの名前(上記ではformName)を表します。
この名前でアクションがどのアクションフォームを使うかを決定します。
|
|
type
|
実際のアクションフォームのクラスを表します。
|
|
■
form-propertyタグ
|
|
name
|
プロパティの名前を表します。
この名前はブラウザから送られてくるリクエストのキーと同じでなければなりません。
|
|
type
|
name属性で指定したプロパティの型を表します。(上記ではStringを指定)
型はプリミティブ型、String、配列、コレクション等が指定できます。
|
|
initial
|
初期値を設定するときに使用します。
今回は使用していないためtypeで指定した型の初期値が設定されます。
|
■validator-rules.xmlの設定
Strutsのvalidator-rules.xmlは入力検証を行なう際のルールが定義されています。
例えば必須チェック、長さチェック等がデフォルトで定義されていて下記で説明する
validation.xmlで呼び出すことができます。
以下に使用頻度の高いデフォルトで用意されているルールの一覧を記述します。
|
■
バリデータールール一覧
|
|
required
|
入力必須のチェック
|
|
minlength
|
最小文字数(バイト数ではない)のチェック
|
|
maxlength
|
最大文字数(バイト数ではない)のチェック
|
|
mask
|
指定した正規表現と一致するかをチェック
|
|
intRange
|
指定した数値の範囲内かをチェック
|
|
email
|
メールアドレスのフォーマットチェック
|
|
url
|
URLのフォーマットチェック
|
|
validwhen
|
指定した条件式と一致するかをチェック
|
■validation.xmlの設定
Strutsのvalidation.xmlはstruts-config.xmlで定義したform-beanタグの入力内容を
validator-rules.xmlのルールを使用してStrutsでチェックを行なう設定をするファイルです。
<form-validation>
<formset>
<form name="formName">
<field property="userName" depends="required">
<arg0 key="ユーザ名" resource="false" />
</field>
<field property="address" depends="required,maxlength">
<arg0 key="住所" resource="false"/>
<var>
<var-name>maxlength</var-name>
<var-value>32</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
|
上記の例ではuserNameはrequired、addressはrequiredとmaxlengthのチェックを行なう設定です。
arg0タグは上記で設定したMessageResources.propertiesに例えばメッセージ「{0}は必須」があれば
{0}の部分をkeyで指定した値に置き換えます。(userNameの場合は「ユーザ名は必須」となる)
また、resource属性をfalseにするとリソースバンドルを使用する設定となります。
ここまでで基本的なStrutsへの設定は終了です。※次は アクションで実行する設定を参照。
■validator-rules.xmlの拡張
上記の内容で基本的な操作は可能になりましたが今度はvalidator-rules.xmlに存在しない
ルールをStrutsで拡張(追加)したい場合の説明します。
拡張クラスの作成方法はjava.io.Serializableをimplementsしてルール分のメソッドを追加します。
メソッドはstaticメソッド(public)で引数(サンプル参照)、戻り値をboolean型(trueがチェック正常)
を返せば後は自由です。
package pkg;
import java.io.Serializable;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorUtil;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.validator.Resources;
public class ExpanseFieldChecks implements Serializable {
protected static boolean isString(Object o) {
return (o == null) ? true : String.class.isInstance(o);
}
public static boolean validateTest(Object bean, ValidatorAction validator,
Field field, ActionErrors errors, HttpServletRequest request) {
String value = null;
if (isString(bean)) {
value = (String) bean;
} else {
value = ValidatorUtil.getValueAsString(bean, field.getProperty());
}
if (value.equals("test")) {
return true;
}
errors.add(field.getKey(), Resources.getActionMessage(request, validator, field));
return false;
}
}
|
上記のサンプルでは「test」が入力された場合のみ正常を返すルールです。
<form-validation>
<global>
<validator name="test"
classname="pkg.ExpanseFieldChecks"
method="validateTest"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
msg="errors.test">
</validator>
</global>
</form-validation>
|
上記の内容をvalidator-rules.xmlに追加すればルール「test」を使用することができます。
「msg」には上記message-resourcesタグで指定したファイルのメッセージコードを指定します。
以上でStrutsにおけるルール拡張の説明を終了します。
■関連書籍
Strutsに関連する書籍をいくつか紹介します。
|