Strutsのvalidator
StrutsのValidatorについて、調べてみたので、メモメモ。
Validator
Strutsには入力チェックの仕組みとしてValidatorがあります。
簡単にいえば、ActionFormの中身をチェックする仕組みです。入力値のチェックや場合によっては、ログイン状態のチェックや、メンテナンス時間のチェックなど、考えればいろいろできそうです。
実際に、validatorを使うためには、以下の設定が必要です。
プラグイン設定
Strutsのvalidator機能は、プラグインとして提供されている為、struts-config.xmlにプラグインの設定を追加します。
<!-- Validator Plugin Setting -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validation.xml,/WEB-INF/validator-rules.xml" />
</plug-in>
上記設定を追加することで、/WEB-INF/validation.xmlと/WEB-INF/validator-rules.xmlの2つのファイルを設定として読み込むようになります。
validation.xmlの追加
/WEB-INF/validation.xmlのファイルを作成して、チェックする項目などを定義します。
【validation.xml】
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation// DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <formset> <!-- 適用するアクション・フォームBeanを論理名で指定 --> <form name="formName"> <field property="inputValue" depends="required"> </field> </form> </formset> </form-validation>
上記の場合、Struts-config.xmlでformNameと定義されたフォームクラスについて、入力時チェックをするということになります。
対象は、inputValueプロパティで、チェックは必須チェック(required)となります。
Strutsには、いくつかのチェックがデフォルトで提供されている為、単項目チェックなどは非常に簡単に実装することができます。
また業務チェックなどの複合チェックも独自にチェックロジック(validator)を実装することも可能です。※方法については、後程の記事で。
validator-rules.xmlの追加
/WEB-INF/validator-rules.xmlを作成して、チェックのルールを定義します。
上のvalidation.xmlで定義しているのが、必須(required)なので、今回は以下のように設定します。
【validator-rules.xml】
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation// DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <global> <validator name="required" classname="org.apache.struts.validator.FieldChecks" method="validateRequired" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, org.apache.commons.validator.Validator, javax.servlet.http.HttpServletRequest" msg="errors.required"/> </global> </form-validation>
なお、Strutsが提供する必須チェックは、String型のプロパティに適応される為、例えば、配列型の必須には使えません。ご注意を。
struts-config.xmlへの追加
今回はInputWorldForm.javaとInputWorldAction.java、input.jspを作成して、struts-config.xmlに設定しています。
【form-beanの設定】
InputWorldForm.javaには、プロパティとして、「inputValue」を作成しています。getter/setterも作成済みです。
また、Formクラスは、validateFormを継承して作成するようにしてください。
<form-beans> <form-bean name="inputworld" type="jp.co.test.form.InputWorldForm"> </form-bean>
【actionの設定】
Actionクラスの設定としては、InputWorldActionを作成して、initを返すようにしています。また、設定としてvalidate="true"として、チェックを行うような指定をしています。
<!-- INPUT TEST --> <action path="/inputworld" type="jp.co.test.actions.InputWorldAction" name="inputworld" validate="true" scope="session" input="/input.jsp"> <forward name="init" path="/input.jsp" /> </action>
【メッセージファイルの設定】
エラー発生時に表示するエラーメッセージの設定を以下のように行います。
<message-resources parameter="MessageResources" />
MessageResources.propertiesの作成
struts-config.xmlで指定したメッセージファイルを作成します。メッセージファイルはソースと同じフォルダに配置します。
たとえば、今回のstruts-config.xmlの設定の場合で、ソースファイルをsrc/java/配下に作成している場合、src/java/MessageResources.propertiesというファイルを作成することになります。
errors.required = それは必須です。
ノウハウメモ
- strutsの標準のチェックは基本的にString型のプロパティが対象である。
つまり、String[]型の必須チェックなどを行いたい場合は、requiredではチェックできないので、別途専用のチェッククラスを作成する必要がある。
その記事はまた、後程。
以上。