手順
まずはサーバー側の設定
- struts-config.xmlに以下のようにバリデータプラグインの設定を記述。
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in>
- バリデータフォームクラスを継承してフォームを作成。VaildatorFormを継承する場合は該当するフォームクラスを、DynaValidatorFormを使用する場合は、struts-config.xmlの<form-bean>エレメントに以下を例とする記述を追加。
<form-bean
name="VTInitForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="number" type="java.lang.String"/>
<form-property name="name" type="java.lang.String"/>
</form-bean>
- struts-config.xmlのactionエレメントのプロパティとして、以下の情報を記述。
- validate:true
- input:バリデーションエラー時の遷移先JSP
- validation.xmlにバリデーションの情報を記述。
- validator-rules.xmlにバリデーションルールを記述。
- バリデーションエラー時の戻り先JSPに<html:errors/>を記述しておけば、バリデーションエラー時にエラー情報が表示される。
クライアントチェックJavaScriptの生成
- JSPに以下のタグを追加。formNameプロパティに、バリデーション対象となるフォームの論理名(<form-bean>エレメントのname属性の値)を記述する。
<html:javascript formName="VTRegisterForm"/>
- JSPのフォームタグに、onsubmitプロパティを追加。「"validate" + 前述のformName値」で表現されるJavaScript関数が自動生成されるので、この関数(引数はthis)を指定する。
<html:form action="/vtRegister"
onsubmit="return validateVTRegisterForm(this)">
注意点
- ValidatorActionFormだとなぜかフォームチェック関数validateXXXForm()が自動生成されず、スクリプトエラーになる。validation.xmlでのフォーム名がパス指定になるので、これがうまく認識されない理由か?
- バリデーションエラー時に表示するメッセージリソースに、エスケープシーケンスなしの"や'などを使用しないこと。生成されるJavaScriptでのクオーテーションと整合性が取れずにスクリプトエラーになる。
ValidatorFormとValidatorActionFormの違い
ValidatorFormとValidatorActionFormの違いはひとつだけ。それは、validation.xmlの<form>のname属性に指定する文字列は・・・
- ValidatorFormでは、struts-config.xmlの<action>エレメントのname属性と同じ文字列。
- ValidatorActionFormでは、struts-config.xmlの<action>エレメントのpath属性と同じ文字列。