文章出處

一、三種實現方式

① 用validate()方法實現數據校驗

繼承ActionSupport類,該類實現了Validateable接口,該接口中定義了一個validate()方法,在自定義的Action類中重寫validate()方法,如果校驗表單輸入域出現錯誤,則將錯誤添加到ActionSupport類的fieldErrors域中,然后通過OGNL表達式負責輸出。

實現思路:

準備注冊頁面:regist.jsp

創建Action類ValidateAction,該類繼承自ActionSupport,并重寫execute(),因為要實現數據校驗,所以需重寫validate(),然后進行一系列的判定

public class ValidateAction extends ActionSupport{

    private UserInfo info;
    //確認密碼
    private String okpwd;
    
    @Override
    public String execute() throws Exception{
        return SUCCESS;
    }
    
    //實現數據校驗
    @Override
    public void validate() {
        if(info.getUsername().length()==0){
            addFieldError("username", "用戶名不能為空");
        }
        
        if(info.getPassword().length()==0){
            addFieldError("pwd", "密碼不能為空");
        }
        
        if(!info.getPassword().equals(okpwd)){
            addFieldError("pwd", "兩次密碼必須一致");
        }
    }
    

配置Action --struts.xml:

<!-- 測試validate方法 -->
        <action name="Validate" class="cn.happy.action.ValidateAction">
            <result name="success">success.jsp</result>
            <result name="input">regist.jsp</result>
        </action>

 


 

② 用execute()方法實現數據校驗

繼承自ActionSupport類,重寫execute()。繼承該類是因為它實現了Validateable接口,才能實現數據校驗

相對于Validate()方法不同之處就是對hasErrors進行了判定,判定FieldError對象中是否有錯誤信息,若有錯誤信息,返回input

同理 配置Action如上所示

public class ExecuteAction extends ActionSupport {
    private UserInfo info;
    // 確認密碼
    private String okpwd;

    @Override
    public String execute() throws Exception {
        if (info.getUsername().length() == 0) {
            addFieldError("username", "用戶名不能為空");
        }

        if (info.getPassword().length() == 0) {
            addFieldError("pwd", "密碼不能為空");
        }

        if (!info.getPassword().equals(okpwd)) {
            addFieldError("pwd", "兩次密碼必須一致");
        }
        
        //判定FieldError對象中是否有錯誤信息
        //若有錯誤信息 則返回input
        if(this.hasErrors()){
            return INPUT;
        }
        return SUCCESS;
    }

 


③ 用validateXxx()方法實現數據校驗
在validate()方法中對數據驗證是可以工作的,如果在字段非常多的情況下,而且每個字段又有很復雜的驗證,那么我們的validate方法中的代碼會越來越多。 針對特定的方法輸入的數據的驗證我們把他放到validateXxx方法中,Xxx是方法名的首字母大寫形式。

一般在字段判定比較多的情況下,可以使用這種方式實現數據校驗。提取到自定義的方法中

Struts.xml不同之處在于,通過method="regist"確認調用哪個方法

實現效果:

 若用戶無輸入:

若輸入符合匹配條件:



二、用struts2的驗證框架實現數據校驗
① 為什么要用驗證框架:
當驗證規則比較復雜時,Action類的代碼將變得很繁瑣,假如我們要對電話號碼的格式進行驗證,是非常麻煩的
②驗證框架的優點:
Struts2中內置了一個驗證框架,將常用的驗證規則進行了編碼實現,使用驗證框架時,用戶無需再進行編碼,只要在外部配置文件中指定某個字段需要進行的驗證類型,并提供出錯誤信息即可,從而大大減輕了開發者的負擔,提高開發效率
③命名規范:
1、文件的命名規則:
ActionName-validation.xml,ActionName為需要校驗的Action類名,如:UserAction-validation.xml

2、文件存放路徑:
該文件與Action類的class文件位于同一個路徑下

3、文件格式:包括如下3個配置元素
<field>: 為每一個需要校驗的字段添加一個驗證元素<field>,name屬性表示要校驗的字段名。
<field-validator>: 使用該元素來指定校驗規則,type屬性為校驗規則名
<message>: 使用該元素來指定校驗出錯時要顯示的標簽,key屬性指向資源文件中的標簽名

常用驗證規則:

實現思路:

 準備注冊頁面:

 

創建Action類,繼承ActionSupport類,并重寫execute(),封裝實體類屬性

配置Action--struts.xml

創建UserAction-validation.xml文件:

該文件頭文件的查找位置:

 

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

        <validators>
        
         <!-- 用戶名:不能為空 長度在6-10之間 -->  
         <field name="info.username">
         <field-validator type="requiredstring">
         <param name="trim">true</param>
         <message>用戶名不能為空</message>
         </field-validator>
         
         <field-validator type="stringlength">
         <param name="maxLength">10</param>
         <param name="minLength">6</param>
        <message>用戶名長度必須在${minLength}和${maxLength}之間</message>
         </field-validator>
         
         </field>
         
        <!-- 驗證密碼-->
        <field name="info.password">
        <field-validator type="requiredstring">
        <message>密碼不能為空</message>
        </field-validator>
        </field>
        
        <!-- 確認密碼 -->
        
          <field name="okpwd">
        <field-validator type="fieldexpression">
        <param name="expression">info.password==okpwd</param>
        <message>密碼和確認密碼必須一致</message>
        </field-validator>
        </field>
        
        <!-- 驗證電話號碼 -->    
        
        <field name="info.phone">
        <field-validator type="requiredstring">
        <message>電話號碼不能為空</message>
        </field-validator>
        </field>
        
          
      <field name="info.phone">
        <field-validator type="regex">
        <param name="regex">^(\d{3,4}-){0,1}(\d{7,8})$</param>
        <message>電話號碼格式不正確</message>
        </field-validator>
        </field>
         
         
       
        </validators>

 實現效果:

若都不輸入:

若輸入匹配上:


實現數據校驗的流程:  

① 對輸入的數據首先進行類型轉換,并封裝成Action屬性

② 如果類型轉換出現錯誤,就將錯誤提示保存到ActionContext,并封裝到fieldError中

③ 類型轉換執行完畢后,會根據項目的配置執行驗證框架的校驗,也可能通過執行validate()或者validateXxx()方法進行校驗

④ 如果經過以上步驟都沒有出現錯誤,那么將直接調用Action里用于處理用戶請求的方法,然后根據結果類型轉入相應的視圖資源。一旦出現了錯誤,那么系統將直接返回輸入數據的視圖資源,后者通常由workflow攔截器處理

 

 

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()