Struts2的手動驗證

struts2手動驗證:
 * 首先要從頁面中獲取對應的標籤name屬性的值,在動做類action中聲明同名的屬性,提供get和set方法
 
 * 要繼承ActionSupport類或者實現Validateable接口
 
 * 重寫Validateable接口的validate()方法
  * 前提是:要保證setUsername()、validate()、login()方法要按照這個前後順序執行
 
 * 若是登陸失敗,如何處理:
  * this.addFieldError( key, value);
   * key:錯誤提示字段
   * value:錯誤提示信息
 
 * 何時纔是驗證經過?
  * 驗證經過:一、map集合不存在;二、map集合存在併爲空
  * 驗證不經過:map集合存在而且不爲空
 
 * 分析需求:
  * 用戶名不能爲null ,""
  * 密碼不能爲null, "" ,而且密碼的長度6-12之間
 
 * 針對全部業務方法進行驗證仍是針對某個指定業務方法進行驗證?
  * 重寫的validate()方法,針對全部業務方法進行驗證
  * 重寫的validate()方法加上要驗證的指定的業務方法名(業務方法名的首字母大寫),實現針對某個指定的業務方法進行驗證
   * 爲何要這樣進行拼接?由於struts2框架底層拼接,若是不這樣寫,底層就找不到對應方法名
 java

 

package cn.itcast.validate;框架

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;this

import com.opensymphony.xwork2.ActionSupport;繼承

@SuppressWarnings("serial")
public class ValidateAction extends ActionSupport {接口

 private String username;
 
 private String psw;
 
 public void setUsername(String username) {
  System.out.println("ValidateAction ************ setUsername()");
  this.username = username;
 }
 
 /*
  * 驗證方法:
  *  * 該動做類action必須繼承ActionSupport或者實現Validateable接口
  *  * 必須重寫Validateable接口提供的validate()方法
  *
  *  * 必需要保證setUsername()、validate()、login()方法的執行順序以下:
  *   * setUsername()
  *   * validate()
  *   * login()
  *
  *  * 若是登陸失敗,如何處理:
  *   * this.addFieldError( key, value);
  *    * key:錯誤提示字段
  *    * value:錯誤提示信息
  *
  *  * 經過底層代碼說明:
  *   public synchronized void addFieldError(String fieldName, String errorMessage) {
          final Map<String, List<String>> errors = internalGetFieldErrors();  //聲明一個map集合
          List<String> thisFieldErrors = errors.get(fieldName);     //聲明一個list集合,放入對應錯誤提示信息
  
          if (thisFieldErrors == null) {           //若是list集合爲空
              thisFieldErrors = new ArrayList<String>();       //從新建立一個list集合
              errors.put(fieldName, thisFieldErrors);        //把list集合放入到map集合中
          }
  
          thisFieldErrors.add(errorMessage);          //把錯誤提示信息放入到list集合中
      }
  *
  *  * 何時纔是驗證經過?
  *   * 驗證經過:一、map集合不存在;二、map集合存在併爲空
  *   * 驗證不經過:map集合存在而且不爲空
  *
  *  * 分析需求:
  *   * 用戶名不能爲null ,""
    * 密碼不能爲null, "" ,而且密碼的長度6-12之間
  *
  *  * 針對全部業務方法進行驗證仍是針對某個指定業務方法進行驗證?
  *   * 重寫的validate()方法,針對全部業務方法進行驗證
  *   * 重寫的validate()方法加上要驗證的指定的業務方法名(業務方法名的首字母大寫),實現針對某個指定的業務方法進行驗證
  *    * 爲何要這樣進行拼接?由於struts2框架底層拼接,若是不這樣寫,底層就找不到對應方法名
  *  
  */
 public void validateLogin() {
  System.out.println("ValidateAction ************ validate()");
  
  if(username==null||username.equals("")){
   this.addFieldError("error", "用戶名不能爲空!");
  }
  
  if(psw==null||psw.equals("")){
   this.addFieldError("error", "密碼不能爲空!");
  }else{
   
   String pattern = "^[0-9a-zA-Z]{6,12}$";
   
   Pattern p = Pattern.compile(pattern);
   
   Matcher m = p.matcher(psw);
   
   boolean b = m.matches();
   
   if(!b){
    this.addFieldError("error", "密碼的長度必須在6至12之間!");
   }
   
  }
  
 }
 
 public String login(){
  System.out.println("ValidateAction ********* login()");
  
  System.out.println("username = "+username);
  
  System.out.println("password = "+psw);
  
  return "success";
 }
 
 public String test(){
  System.out.println("ValidateAction ********* test()");
  return "success";
 }get

 public String getUsername() {
  return username;
 }it

 public String getPsw() {
  return psw;
 }io

 public void setPsw(String psw) {
  this.psw = psw;
 }
 
}ast

相關文章
相關標籤/搜索