デジタルチャイルド日記

コンピュータ関連のいろいろメモを残していく子供部屋です。

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ではチェックできないので、別途専用のチェッククラスを作成する必要がある。
    その記事はまた、後程。

 以上。