* 首先要從頁面中獲取對應的標籤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框架底層拼接,若是不這樣寫,底層就找不到對應方法名
框架
1 index.jsp 2 <s:fielderror></s:fielderror> 3 <s:form name="loginForm" namespace="/validate" action="ValidateAction_login.action" method="post"> 4 用戶名:<s:textfield name="username"/><br/> 5 密碼:<s:password name="pwd"/><br/> 6 <s:submit value="登陸"/> 7 </s:form> 8 <a href="${pageContext.request.contextPath}/validate/ValidateAction_test.action">test</a>
1 @SuppressWarnings("serial") 2 public class ValidateAction extends ActionSupport { 3 private String username; 4 private String pwd; 5 public String getUsername() { 6 return username; 7 } 8 public void setUsername(String username) { 9 this.username = username; 10 } 11 public String getPwd() { 12 return pwd; 13 } 14 public void setPwd(String pwd) { 15 this.pwd = pwd; 16 } 17 //只驗證Login 業務,不驗證test,若是所有驗證,把方法名攜寫做validate() 18 public void validateLogin() { 19 if(username==null || username.equals("")) 20 { 21 this.addFieldError("error", "用戶名不能爲空");//key:錯誤標示;value:錯誤提示 22 } 23 if(pwd==null || pwd.equals("")) 24 { 25 this.addFieldError("error", "密碼不能爲空"); 26 }else { 27 String pattern="^[0-9a-zA-Z]{6,12}$"; 28 Pattern p=Pattern.compile(pattern); 29 Matcher m=p.matcher(pwd); 30 boolean b=m.matches(); 31 if(!b){ 32 this.addFieldError("error", "密碼格式錯誤"); 33 } 34 } 35 } 36 37 public String login(){ 38 System.err.println("1234567890-"); 39 return "success"; 40 } 41 public String test(){ 42 System.err.println("987654321"); 43 return "success"; 44 } 45 }