一、三種實現方式
① 用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攔截器處理
文章列表