Struts2數據校驗

1、三種實現方式html

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

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

實現思路:app

準備註冊頁面:regist.jsp框架

建立Action類ValidateAction,該類繼承自ActionSupport,並重寫execute(),由於要實現數據校驗,因此需重寫validate(),而後進行一系列的斷定jsp

複製代碼
複製代碼
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:ide

<!-- 測試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接口,才能實現數據校驗ui

相對於Validate()方法不一樣之處就是對hasErrors進行了斷定,斷定FieldError對象中是否有錯誤信息,如有錯誤信息,返回inputthis

同理 配置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"確認調用哪一個方法

實現效果:

 若用戶無輸入:

若輸入符合匹配條件:



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

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

三、文件格式:包括以下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攔截器處理

轉自:http://www.cnblogs.com/jingpeipei/p/5953666.html

相關文章
相關標籤/搜索