Struts Validator

 

【Validatorで確認できるルール】

ルール名
内容
required
入力必須の確認。
validwhen
指定した条件式に合致するかの確認。使用する際はantlr.jarが必要。
minlength
指定した文字数より少なくないかの確認。
maxlength
指定した文字数より多くないかの確認。
mask
指定した正規表現に合致する値かの確認。
byte
Byte型のクラスに変換できる値かの確認。
short
Short型のクラスに変換できる値かの確認。
integer
Integer型のクラスに変換できる値かの確認。
long
Long型のクラスに変換できる値かの確認。
float
Float型のクラスに変換できる値かの確認。
double
Double型のクラスに変換できる値かの確認。
date
Date型のクラスに変換できる値かの確認。変換できるかはSimpleDateFormatクラスを利用する。
intRange
指定した数値の範囲内の値かの確認。値はInteger型のクラスに変換できる必要がある。
floatRange
指定した数値の範囲内の値かの確認。値はFloat型のクラスに変換できる必要がある。
doubleRange
指定した数値の範囲内の値かの確認。値はDouble型のクラスに変換できる必要がある。
creditCard
クレジットカード番号のフォーマットに合致する値かの確認。
email
メールアドレスのフォーマットに合致する値かの確認。
url
URLのフォーマットに合致する値かの確認。

 

1. アクション・フォームBeanにValidator処理を行うための記述を行います。
2. アクション・フォームBeanの各プロパティに適用するValidatorルールをvalidation.xmlに記述します。Validator自体の動作はvalidator-rules.xmlに定義されています。validator-rules.xmlはあらかじめ定義されているものを使用します。
3. メッセージ・リソースファイルにvalidation.xmlのルールに合致しなかった場合に表示するエラーメッセージを記述します。
4. エラーメッセージを表示するための、JSPプログラムを作成します。
5. struts-config.xmlにValidator関連の設定を行います。

【ExValidatorForm.java】
package struts;

import org.apache.struts.validator.*;
import org.apache.struts.action.*;

//Validatorを使用する場合はValidatorFormクラスを継承します。
//その他は一般的なアクション・フォームBeanの作成方法と変わりません。
public final class ExValidatorForm extends ValidatorForm {
  private String requireV;
  private String validwhenV;
  private String countV;
  private String patternV;
  private String dateV;
  private String rangeV;
  private String emailV;

  public void setRequireV(String requireV) 
    {this.requireV = requireV;}
  public void setValidwhenV(String validwhenV)
    {this.validwhenV = validwhenV;}
  public void setCountV(String countV) 
    {this.countV = countV;}
  public void setPatternV(String patternV) 
    {this.patternV = patternV;}
  public void setDateV(String dateV) 
    {this.dateV = dateV;}
  public void setRangeV(String rangeV) 
    {this.rangeV = rangeV;}
  public void setEmailV(String emailV) 
    {this.emailV = emailV;}

  public String getRequireV() {return requireV;}
  public String getValidwhenV() {return validwhenV;}
  public String getCountV() {return countV;}
  public String getPatternV() {return patternV;}
  public String getDateV() {return dateV;}
  public String getRangeV() {return rangeV;}
  public String getEmailV() {return emailV;}
}

2.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="ExValidator">
      <!-- requiredルールの指定 -->
      <field property="requireV" depends="required">
      </field>
      <!-- validwhenルールの指定
           validwhenの条件式をtest変数で指定
           *this*はプロパティvalidwhenVを表す -->
      <field property="validwhenV" depends="validwhen">
        <msg name="validwhen" key="errors.validwhen" />
        <var>
        <var-name>test</var-name>
        <var-value>
          ((*this* != null) and (countV != null))
        </var-value>
        </var>
      </field>
      <!-- minlengthルールの指定
           minlength変数で条件の最低入力数を指定 -->
      <field property="countV" depends="minlength">
        <var>
        <var-name>minlength</var-name>
        <var-value>4</var-value>
        </var>
      </field>
      <!-- maskルールの指定
           mask変数で条件パターンを指定 -->
      <field property="patternV" depends="mask">
        <var>
        <var-name>mask</var-name>
        <var-value>^[a-zA-Z]*$</var-value>
        </var>
      </field>
      <!-- dateルールの指定
           datePattern変数で条件の日時パターンを指定 -->
      <field property="dateV" depends="date">
        <msg name="date" key="errors.date" />
        <var>
        <var-name>datePattern</var-name>
        <var-value>yyyy/mm/dd</var-value>
        </var>
      </field>
      <!-- intRangeルールの指定
           max変数、min変数で条件の範囲を指定 -->
      <field property="rangeV" depends="intRange">
        <var>
          <var-name>min</var-name>
          <var-value>4</var-value>
        </var>
        <var>
          <var-name>max</var-name>
          <var-value>16</var-value>
        </var>
      </field>
      <!-- emailルールの指定 -->
      <field property="emailV" depends="email">
      </field>
    </form>
  </formset>
</form-validation>

 

各ルールに設定するサブ要素を以下に記載します。
【各ルールのサブ要素】
ルール名
サブ要素
内容
required
-
-
validwhen
test
指定した条件式に合致するかの確認。使用する際はantlr.jarが必要。
minlength
minlength
指定した文字数より少なくないかの確認。
maxlength
maxlength
指定した文字数より多くないかの確認。
mask
mask
指定した正規表現に合致する値かの確認。
byte
-
-
short
-
-
integer
-
-
long
-
-
float
-
-
double
-
-
date
datePattern
日時パターンを指定。パターンはSimpleDateFormatクラスを利用する。datePatternStrictは厳密なパターンが適用される。yyyy/mm/ddで2005/1/1はパターンに合致しない2005/01/01の場合はパターンに合致する。
datePatternStrict
intRange
min
minは最小値、maxは最大値
max
floatRange
min
minは最小値、maxは最大値
max
doubleRange
min
minは最小値、maxは最大値
max
creditCard
-
-
email
-
-
url
allowallschemes
スキームを許可するかどうか。trueを設定するとすべてのスキームが許可される。デフォルトはfalse。
allow2slashes
ダブルスラッシュ(//)を許可するかどうか。デフォルトはfalse。
nofragments
URLの分割を許可するかどうか。デフォルトはfalse(分割を許可する)。
schemes
許可するスキームを,(カンマ)で指定する。デフォルトはhttp, https, ftp。

 

メッセージ・リソースファイルの作成

errors.required =requireV is wrong.<br>
errors.validwhen=validwhenV is wrong.<br>
errors.minlength=countV is wrong.<br>
errors.invalid  =patternV is wrong.<br>
errors.date     =dateV is wrong.<br>
errors.range    =rangeV is wrong.<br>
errors.email    =emailV is wrong.<br>
 

 

validator-rules.xmlにルールごとに該当するメッセージ・リソースファイルのキーが定義されています。以下に定義されているキーを記載します。また、validation.xmlに<msg>タグを記載することで、任意のキーを使用することができます。
 
【メッセージ・リソースファイルのキー】
ルール名
内容
required
errors.required
validwhen
errors.required
minlength
errors.minlength
maxlength
errors.maxlength
mask
errors.invalid
byte
errors.byte
short
errors.short
integer
errors.integer
long
errors.long
float
errors.float
double
errors.double
date
errors.date
intRange
errors.range
floatRange
errors.range
doubleRange
errors.range
creditCard
errors.creditcard
email
errors.email
url
errors.url
 

 

4.JSPの作成

 

【error.jsp】Validatorルールに合致したなかったときに表示されるエラー画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
<head><title>エラー画面</title></head>
<body>

エラーメッセージ
<br>
<%-- <html:messages>タグでエラーメッセージを 表示します。エラーメッセージを表示するときは message属性をfalseにします。 --%> <html:messages id="msg" message="false"> <%-- filter属性をfalseにすることでメッセージに HTMLタグを利用できます。trueにするとHTMLタグが あった場合置換文字(&lt;、&gt;など)に変換します。 --%> <bean:write name="msg" ignore="true" filter="false"/> </html:messages> </body> </html:html>
 
【exValidator.jsp】Validatorチェックを行う値を入力するフォーム画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>Validator処理</title></head>
<body>

<html:form action="/ExValidator">
  入力必須
  <br>
  <html:text property="requireV" size="16"/>
  <br><br>
  validwhen
  <br>
  <html:text property="validwhenV" size="16"/>
  <br><br>
  文字数確認
  <br>
  <html:text property="countV" size="16"/>
  <br><br>
  パターン確認
  <br>
  <html:text property="patternV" size="16"/>
  <br><br>
  日付確認
  <br>
  <html:text property="dateV" size="16"/>
  <br><br>
  範囲確認
  <br>
  <html:text property="rangeV" size="16"/>
  <br><br>
  メールアドレス確認
  <br>
  <html:text property="emailV" size="16"/>
  <br><br>
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>
 

 

5.struts-config.xmlの作成 
【struts-config.xml】
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

 <!-- アクション・フォームBeanの指定 -->
 <form-beans>
  <form-bean name="ExValidator"
             type="struts.ExValidatorForm" />
 </form-beans>

 <!-- アクション・クラスの指定 -->
 <action-mappings>
  <!-- Validatorを使用する場合validate属性をtrueに指定。
       Validatorのエラーを表示する画面をinput属性で指定。 -->
  <action path="/ExValidator"
          type="struts.ExValidatorAction"
          name="ExValidator"
          scope="request"
          validate="true"
          input="/error.jsp">
   <forward name="info" path="/exValidator2.jsp"/>
  </action>
 </action-mappings>

 <!-- メッセージ・リソースファイルの指定 -->
 <message-resources parameter="resources.application"/>

 <!-- Validatorの指定。プロパティpathnamesの値に
      validator-rules.xmlとvalidation.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>

</struts-config>
 
応用処理 
1.複数条件指定
<file>タグのdepends属性に値を複数指定することにより、チェックする条件を複数指定することができます。emailフォーマットチェック且つ、必須入力チェックなど条件を組み合わせて指定できます。
【depends属性に複数条件を指定】
<!-- emailフォーマットチェックと必須入力チェックを指定 -->
<field property="emailV" depends="email,required">
</field>
2.エラーメッセージに可変置き換え文字を利用
<field>タグに<argn>タグ(nは0~3のいずれか)を指定することで、エラーメッセージに可変置き換え文字を使用することができます。可変置き換え文字はメッセージ・リソースファイルで指定、直接指定、<var>タグの変数指定のいずれかを選ぶことができます。直接指定、<var>タグの変数指定を行う場合は<argn>タグのresource属性にfalseを指定する必要があります。
【<argn>タグを指定】
・・・・・
<field property="countV" depends="minlength">
  <!-- 可変置き換え文字にメッセージ・リソースファイルの
       "minlength.msg"を指定 -->
  <arg0 key="minlength.msg" />
  <!-- 可変置き換え文字に<var>タグのminlengthを指定 -->
  <arg1 key="${var:minlength}" resource="false" />
  <var>
    <var-name>minlength</var-name>
    <var-value>4</var-value>
  </var>
</field>
・・・・・
【メッセージ・リソースファイル】
errors.minlength={0} needs over {1} characters.
minlength.msg=minlength

 

3.メッセージ・リソースファイルのキーを指定
<field>タグに<msg>タグを指定することで参照されるメッセージ・リソースファイルのキーを変更することができます。

【<msg>タグを指定】
・・・・・
<field property="requireV" depends="required">
  <!-- エラー時のメッセージ・リソースファイルのキーを
       "errors.original.required"に変更 -->
  <msg name="required" key="errors.original.required" />
</field>
・・・・・

 

4.動的アクション・フォームBeanにValidatorを使用
動的アクション・フォームBeanにValidatorを使用することができます。struts-config.xmlのタグのtype属性にDynaValidatorFormを指定するだけで使用することができます。他の部分はアクション・フォームBean時のValidatorの使用方法と同一です。

【<form-bean>タグにDynaValidatorFromを指定】
・・・・・
  <form-beans>
    <!-- type属性にDynaValidatorFormを指定 -->
    <form-bean
     name="DynaForm"
     type="org.apache.struts.validator.DynaValidatorForm">
     <form-property
      name="requireV"
      type="java.lang.String" />
    </form-bean>
  </form-beans>

  <action-mappings>
    <action path="/ExValidator"
            type="struts.ExValidatorAction"
            name="DynaForm"
            scope="request"
            validate="true"
            input="/error.jsp">
      <forward name="info" path="/exValidator2.jsp"/>
    </action>
  </action-mappings>
・・・・・
posted @ 2008-10-21 15:26  易欧  阅读(429)  评论(0编辑  收藏  举报