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