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.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 }
原文地址:https://www.cnblogs.com/liuwt365/p/4208896.html