标签:
* 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法
* 要继承ActionSupport类或者实现Validateable接口
* 重写Validateable接口的validate()方法
* 前提是:要保证setUsername()、validate()、login()方法要按照这个先后顺序执行
* 如果登录失败,如何处理:
* this.addFieldError( key, value);
* key:错误提示字段
* value:错误提示信息
* 什么时候才是验证通过?
* 验证通过:1、map集合不存在;2、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 }
标签:
原文地址:http://www.cnblogs.com/liuwt365/p/4208896.html