首页 > 代码库 > Struts2 手动验证
Struts2 手动验证
* 首先要从页面中获取对应的标签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.jsp2 <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=http://www.mamicode.com/"登录"/>7 </s:form>8 <a href=http://www.mamicode.com/"${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 }
Struts2 手动验证