Validator plugin

struts-plugins.xmlへの記述

Xdoclet?を使うときには、struts-plugins.xml に plug-inの設定を行い、Xdoclet?によって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>

Form雛形

  1. Eclipseで、ValidatorForm?を継承したFormを作成する
  2. private属性でフィールド(JSPのFORMに対応)を定義
  3. Eclipseで、getter/setterを生成する
  4. Javaソース上にstruts-config.xml/validation.xmlの内容を設定する
    1. Struts上でのFormの名前(struts-config.xml)は、クラスのdocletで定義する
    2. 各項目のValidation(validation.xml)は、setterにdocletで定義する
  5. 必要ならばreset()メソッドで初期値を設定する
     /*
      * Copyright(c)2004-2005 **********. All Rights Reserved.
      */
     package ****.****.****;
     
     import javax.servlet.http.HttpServletRequest;
     
     import org.apache.struts.action.ActionForm;
     import org.apache.struts.action.ActionMapping; 
     
     /**
      * AllForm.
      * @struts.form
      *   name="AllForm"
      * @author
      * @version $Id$
      */
     public class AllForm extends ValidatorForm {
      private Byte byteForm;
      private Date dateForm;
      private Double doubleForm;
      private Float floatForm;
      private Integer integerForm;
      private Long longForm;
      private Short shortForm;
      private String alnumForm;
      private String creditcardForm;
      private String emailForm;
      private String stringForm;
     
      /**
       * <pre>
       * Validatorの設定は、setterメソッドに定義します。
       * 
       * ◎struts.validatorで
       * -必須チェック=required
       * -正規表現チェック=maks
       * を行います。
       * 
       * -必須チェックのエラーメッセージは、application.propertiesの
       *  errors.required です。
       * -正規表現チェックのエラーメッセージは、application.propertiesの
       *  errors.invalid です。
       * -application.propertiesとapplication_ja.propertiesを用意することにより
       *  クライアント側の言語設定によりメッセージをかえることができます。
       *  
       *  application.properties
       *   errors.required={0} is required.
       *   errors.invalid={0} is invalid.Please input {1} form.
       *   AllForm.alNum=Alphabet or Numeric Form
       *  
       *  application_ja.properties
       *   errors.required={0}は、必須入力項目です
       *   errors.invalid={0}は、不正な入力形式です。{1}の形で入力してください。
       *   AllForm.alNum=英数入力項目
       * 
       * ◎struts.validator-varで
       * チェック項目のパラメータを設定します
       * 
       * ◎struts.validator-argsで
       * チェックエラーメッセージのプレイスホルダに埋め込む文字列の設定をします。
       * 複数のエラーメッセージがあっても同じ順番で埋め込まれます。
       * -arg*resourceを使うと、application.properties から文字列を引いてきます
       * -arg*valueを使うと、即値を設定できます。
       * --即値には、${var:****}の形式で、struts.validator-varの値を参照させる
       *   ことができます
       * </pre>
       * @struts.validator
       *  type="required"
       * @struts.validator
       *  type="mask"
       * @struts.validator-var
       *  name="mask"
       *  value="[0-9a-zA-Z]*"
       * @struts.validator-args
       *  arg0resource="AllForm.alNum"
       *  arg1value="${var:mask}"
       * @param alnumForm alnumForm を設定。
       */
      public void setAlnumForm(String alnumForm) {
        this.alnumForm = alnumForm;
      }
     
      /**
       * @return alnumForm を戻します。
       */
      public String getAlnumForm() {
        return alnumForm;
      }
     
      /**
       * @struts.validator
       *   type="byte"
       * @struts.validator-args
       *   arg0resource="AllForm.byte"
       * @param byteForm byteForm を設定。
       */
      public void setByteForm(Byte byteForm) {
        this.byteForm = byteForm;
      }
     
      /**
       * @return byteForm を戻します。
       */
      public Byte getByteForm() {
        return byteForm;
      }
      
                     (中略)
      /**
       * reset.
       * resetメソッドでJSPのFormに初期値を定義することができます。
       * @param map ACTION MAPPING
       * @param req HTTP REQUEST
       */
      public void reset(ActionMapping map,HttpServletRequest req){
        setAlNumForm( "1234567890abcdef" );
        setByteForm( new Byte(0) );
        ...
      }
     }
    

標準で利用可能なValidatorとメッセージ

@struts.validator@struts.validator-var対応するapplication.properties(struts-blank.war添付)
.type.name.value
maskmask正規表現errors.invalid={0} is invalid.Please input {1} form.
maxlengthmaxlength最大桁数errors.maxlength={0} can not be greater than {1} characters.
minlengthminlength最小桁数errors.minlength={0} can not be less than {1} characters.
rangemax最大値errors.range={0} is not in the range {1} through {2}.
min最小値
requirederrors.required={0} is required.
byteerrors.byte={0} must be an byte.
dateerrors.date={0} is not a date.
doubleerrors.double={0} must be an double.
floaterrors.float={0} must be an float.
integererrors.integer={0} must be an integer.
longerrors.long={0} must be an long.
shorterrors.short={0} must be an short.
creditcardrrors.creditcard={0} is not a valid credit card number.
emailerrors.email={0} is an invalid e-mail address.

尚 JSPで <html:errors />タグ を使ってエラーの一覧を表示するときには、 application.properties に定義した以下の項目によって整形される。

# -- standard errors --
errors.header=<UL>
errors.prefix=<LI>
errors.suffix=</LI>
errors.footer=</UL>

JSPへのValidation Javascriptの組込み

独自のValidator

Struts 独自のValidator参照

Validatorでは対処できない複雑な入力チェック

  1. ボタンにより画面全てのValidateするしないを分ける
    • Actionを呼び分けるだけのLookupDispatchAction?を作り、そこからActionを呼ぶ
      JSP ---> LDAction          --(注文)-----> Action
               @struts-action                   @struts-action
                 path="/orderSheet"               path="/order"
                 validate="false"                 validate="true"                   
      
                                 --(商品詳細)-> Action
                                                @struts-action
                                                  path="/merchandiseDetail"
                                                  validate="false"
    • こうすることによって、ボタンによって画面全ての検証をするか検証しないかを分けることが出来る
  2. ボタンにより画面の一部をValidateする
    • Formは、ValidatorActionForm?を継承する
    • validate.xmlを編集
      validate.xml でForm名の代わりに、ActionのURLを使う
      (従来)
      <?xml version="1.0" encoding="Shift_JIS" ?>
      <!DOCTYPE form-validation PUBLIC
       "-//Apache Software Foundation// DTD Commons Validator Rules Configuration 1.0//EN"
       "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
      <form-validation>
         <formset>
           <form name="OrderForm">
             <field property="orderNo" depends="required"/>
               <arg0 key="label.orderNo"/>
             </field>
             <field property="amount" depends="required"/>
               <arg0 key="label.amount"/>
             </field>
           </form>
         </formset>
      (Actionによる検証項目の振り分け)
      <?xml version="1.0" encoding="Shift_JIS" ?>
      <!DOCTYPE form-validation PUBLIC
       "-//Apache Software Foundation// DTD Commons Validator Rules Configuration 1.0//EN"
       "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
      <form-validation>
         <formset>
           <form name="/order">
             <field property="orderNo" depends="required"/>
               <arg0 key="label.orderNo"/>
             </field>
             <field property="amount" depends="required"/>
               <arg0 key="label.amount"/>
             </field>
           </form>
         </formset>
         <formset>
           <form name="/merchandiseDetail">
             <field property="orderNo" depends="required"/>
               <arg0 key="label.orderNo"/>
             </field>
           </form>
         </formset>
    • この方法はXdocletからは使えない

Java#Struts


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2006-04-15 (土) 23:33:11 (6819d)
Short-URL: http://at-sushi.com/pukiwiki/pukiwiki.php?cmd=s&k=041725a36f
ISBN10
ISBN13
9784061426061