struts 2はvalidate()を使って個々の方法を検証します.

11737 ワード

一、なぜstruts 2のvalidate検証フレームを使うのですか?
:struts 2の検証フレームを使って、クライアントから提出されたデータのセキュリティを向上させることができます.検証により、データベースに保存されている情報が正しいことを確認します.
二、struts 2のvalidateフレームを使う?
私たちはstruts 2プロジェクトの基本的なjarパッケージを配置する必要があります.(validate検証フレームは「xwork-core」パッケージが提供されています)
:2.struts 2で持参したvalidateを使って検証する方法は2つあります.
a):コードを使って検証機能を実現する(すなわちアクションSupportの中のvalidateを書き換える方法)validate方法で作成する必要があります.
必要な検証機能はここでいくつかの点を提示する必要があります.
1.私達はactionの中のある指定の方法に対してvalidate()の方法を使って検証する必要がある時、私達はvalidateをカスタマイズする必要があります.
2.カスタムのvalidate方法を使う時は、書き直したアクションSupportのvalidate方法を削除したほうがいいです.(これは避けるためです.
衝突を起こしました.actionクラスに書き換えのvalidate()方法プログラムがあれば、自動的に私達がカスタマイズしたvalidate方法を呼び出すからです.
後に呼び出します.これは何回も検証されています.プログラムの効率が非常によくないです.そして衝突しやすいです.
3.カスタムvalidateメソッドを作成する際には、この方法の方法名に注意が必要です.この方法名はvalidate+対応するフォームで提出されます.
actionでの実行方法名(イニシャル大文字)
コードの一部を添付します.
struts.xml:  
<action name="*/*" class="*" method="test">  
      //   method  action             
            //..      
</action>  
                          
   action     :  
public String test(){//action       
        //..      
    return "";  
    }    
                              
public void validateTest()  
            //        validate   (validateTest)         
{             //       test      
        //..      
}  
                              
@override  
Public String execute()//    ActionSupport     
    {  
        //..      
        return "";  
}  
                              
@override  
public void validate()//    ActionSupport              
       //execute                     
{  
        //             valiateExecute()      
//..      
      }  
b):xmlファイルを用いたプロファイル検証機能(xmlプロファイルでvalidateの検証を推奨)
:1.xwork-coreに包んだxwork-validate.dtdを使用する必要があります(バージョンはプロジェクトによって選択しますが、大体同じです.)
:2.Xmlを使って検証する場合:グローバル検証とローカル検証
a):グローバル検証について
全体的にactionオブジェクト全体に対してxml検証を行います.
グローバル検証を使うときは、actionオブジェクトの同じディレクトリの下でxmlプロファイルを作成する必要があります.
ファイル名は、actionオブジェクトの名前+(-validations.xml)です.
b):ローカル検証について
ローカル検証はactionオブジェクトのいずれかの方法に対してxml検証を行う.
ローカル検証を使う時もactionオブジェクトの同じディレクトリの下でxmlプロファイルを作成します.
しかし、ローカル検証を使うにはstruts.xmlに配置する必要があります.
コードは以下の通りです.(struts.xml)
<constant name="struts.enable.DynamicMethodInvocation" value="false" />  
  
<package name="struts2" extends="struts-default">  
                //   <action>      action    
    <action name="register"class="org.viancent.action.RegisterAction">  
        <result name="success">/show.jsp</result>  
        <result name="input"> /register.jsp</result>  
    </action>  
    //  <action>    action       (       *   {1}       )  
        <action name="register_*" class="org.viancent.action.RegisterAction"method="{1}">  
        <result name="success">/show.jsp</result>  
        <result name="input"> /register.jsp</result>  
    </action>  
</package>  
//actionクラスのtestメソッドにアクセスしたいなら、フォームにこう書いてもいいです.
したがって、このvalidateフレームのxmlプロファイル名は、actionオブジェクト名+(-register-validations.properties)です.
:3.struts 2を使用したvalidateフレームは2種類の検証タイプがあります.
a):業務上の検証を行う.
b):クライアントで検証する.
:1.validateフレームを使ってクライアントで検証する必要があるなら、必ずstruts 2のsタグを使います.
そしてフォームのthemeはできません:simple
        :  
    action  :  
   package org.viancent.action;  
    import java.util.Date;  
    import com.opensymphony.xwork2.ActionSupport;  
  
    public class RegisterAction extends ActionSupport {  
        private String username;  
        private String password;  
        private String repassword;  
        private int age;  
        private Date birthday;  
  
        private String users;  
        public String getUsers() {  
            return users;  
        }  
  
        public void setUsers(String users) {  
            this.users = users;  
        }  
  
        public String getUsername() {  
            return username;  
        }  
  
        public void setUsername(String username) {  
            this.username = username;  
        }  
  
        public String getPassword() {  
            return password;  
        }  
  
        public void setPassword(String password) {  
            this.password = password;  
        }  
  
        public String getRepassword() {  
            return repassword;  
        }  
  
        public void setRepassword(String repassword) {  
            this.repassword = repassword;  
        }  
  
        public int getAge() {  
            return age;  
        }  
  
        public void setAge(int age) {  
            this.age = age;  
        }  
  
        public Date getBirthday() {  
            return birthday;  
        }  
  
        public void setBirthday(Date birthday) {  
            this.birthday = birthday;  
        }  
  
        @Override  
        public String execute() throws Exception {  
            // TODO Auto-generated method stub  
            return super.execute();  
        }  
  
        //           
        public String test() throws Exception {  
            System.out.println("test method invoked!");  
            // TODO Auto-generated method stub  
            return super.execute();  
        }  
  
        //           
        public void validateTest() {  
            System.out.println("validateTest method invoked!");  
        }  
  
         @Override  
        public void validate() {  
        System.out.println("validate method invoked!");  
         if (null == this.getPassword()  
        || "".equals(this.getPassword()) || null ==   
                this.getRepassword()  
         || "".equals(this.getRepassword())) {  
         return;  
            }  
  
         if (!this.getPassword().equals(this.getRepassword())) {  
         this.addFieldError("repassword",  
         "repassword should be same password");  
         }  
         }  
    }  
struts.xmlの情報:
<struts>  
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
  
<package name="struts2" extends="struts-default">  
<action name="register" class="org.viancent.action.RegisterAction">  
    <result name="success">/show.jsp</result>  
    <result name="input"> /register.jsp</result>  
</action>  
<action name="register_*" class="org.viancent.action.RegisterAction"  
                        method="{1}">  
    <result name="success">/show.jsp</result>  
    <result name="input"> /register.jsp</result>  
</action>  
</package>              
</struts>  
ローカルvalidateフレームのxml設定情報(Register Action-register-validations.xml)
<validators>  
      
    <field name="username"> //               
         <field-validator type="requiredstring"> //       
         <param name="trim">true</param>  
         <message>username should be notblank!</message>  
              //               
    </field-validator>  
    <field-validator type="stringlength">  
        <param name="minLength">6</param>  
        <param name="maxLength">10</param>  
        <message>username should be not between${minLength} and ${maxLength}</message>  
    </field-validator>  
    </field>  
  
    <field name="age">  
        <field-validator type="required">  
        <message>age should be not blank!</message>  
        </field-validator>  
  
        <field-validator type="int">  
        <param name="min">1</param>  
        <param name="max">150</param>  
        <message>age should be between ${min} and ${max}</message>  
        </field-validator>  
    </field>  
  
    <field name="birthday">  
        <field-validator type="required">  
        <message>birthday should be not blank!</message>  
        </field-validator>  
  
        <field-validator type="date">  
        <param name="min">1990-10-10</param>  
        <param name="max">2011-3-14</param>  
        <message>birthday should be between ${min} and ${max} </message>  
                </field-validator>  
    </field>  
</validators>  
局validateフレームのxml配置情報(Register Action-validations.xml)
<validators>  
        <field name="users">  
            <field-validator type="requiredstring">  
            <message>users should be not blank!</message>  
            </field-validator>  
  
            <field-validator type="stringlength">  
            <param name="minLength">6</param>  
            <param name="maxLength">10</param>  
            <message>users should be between ${minLength} and ${maxLength}</message>  
               </field-validator>  
        </field>  
</validators>  
viewインターフェースのjsp情報:
    register.jsp:  
                  
    <body style="text-align: center">  
        <s:form action="register_test">//       
        <s:textfield name="username" id="username" label="username"></s:textfield>  
        <s:password name="password" id="password" label="password"></s:password>  
        <s:password name="repassword" id="repassword" label="repassword"></s:password>  
        <s:textfield name="age" id="age" label="age"></s:textfield>  
        <s:textfield name="birthday" id="birthday" label="birthday"></s:textfield>  
        <s:submit></s:submit>  
        <s:reset></s:reset>  
</s:form>  
  
        <s:form action="register" validate="true">//       validate="true"(   )  
        <s:textfield name="users" label="users" id="users"></s:textfield>  
        <s:submit></s:submit>  
        </s:form>  
    </body>  
ショー.jsp:
<body>  
    <s:property value="username"/>  
    <s:property value="password"/>  
    <s:property value="age"/>  
    <s:property value="birthday"/>  
    <s:property value="users"/>  
</body>  
ここでvalidate xml検証のルールを説明します.
<field name=>/自動検査機
<validator type=“”
//非自動検証器
認証規則:
requiredstring検証は、属性が「-」であるかどうかを確認します.パラメータを設定する必要はありません.
required
認証は属性が(null)かどうかはパラメータを設定する必要はありません.
要点
属性が整数かどうかを検証します.これは何の数の間にパラメータ(min,max)が必要ですか?
stinglength検証文字列の長さは文字列に必要な長さを設定することができます.パラメータ(minLength、maxLength)
ダテ
検証対象がある期間に時間帯を設定できるかどうかはパラメータ(min,max)が必要です.
レゲックス
正規の検証を使う
その他の具体的にはxwork-coreのカバンの中のcompensmphone.xwork 2.validator.validatorsの下の種類と
xwork-default.xml