Struts2处理多个input试图处理的问题

来源:互联网 发布:网络dm什么意思 编辑:程序博客网 时间:2024/06/06 01:58

Struts2处理多个input试图处理的问题

今天重新回顾了一下struts2框架,因为之前学习时,并未深入,导致遇到了一个动态方法调用和动态校验时,遇到多个input视图导致校验方法无法区分input,一开始我以为struts2会在配置文件中提供区分input视图的配置区分,最好找来找去也没找到,最后查看源码分析得到:inputResultName,这个是校验视图参数,我们只要修改这个参数就可以动态指定校验方法的input视图,但是我们不可能去直接修改源码吧,知道了这个,解决方案就出来了

分析过程:
action继承ActionSupport,但是,我们查看ActionSupport源码的validate方法,
package com.opensymphony.xwork2.ActionSupport

    public void validate() {    }

发现什么也没有,但是我们看到了input这个参数,点开一看,这个是定义在action中的常量
package com.opensymphony.xwork2.Action;

  public static final String INPUT = "input";

无法修改怎么班,
那就换条路,看看拦截器中是否调用过这个方法,找到,
public class DefaultWorkflowInterceptor extends MethodFilterInterceptor
修改过程,参看这个博文就好:

http://blog.csdn.net/a385833253/article/details/6914746

但是这样做太麻烦,struts2早就为我们考虑到了这个问题,使用注解:
@InputConfig(resultName=”regist”) 在相应的被校验方法上指定视图就好
如:

package com.leige.web.action;import com.leige.domain.User;import com.leige.exception.UserException;import com.leige.service.UserService;import com.leige.util.MD5Util;import com.leige.util.StringUtil;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.opensymphony.xwork2.interceptor.annotations.InputConfig;public class UserAction extends ActionSupport implements ModelDriven<User> {    //用户接收页面参数    private User user=new User();    private static final long serialVersionUID = 4520512456046636470L;    /*  service由spring注入*/    UserService userService;    public void setUserService(UserService userService) {        this.userService = userService;    }    @Override    public User getModel() {        return user;    }   /** * 校验注册方法 */   public void validateRegist() {     String username=user.getUsername();     //校验用户名,     if(StringUtil.isEmpty(username)){        this.addFieldError("username", "用户名不可为空");     }else if(!username.matches("\\w{3,15}")){         this.addFieldError("username", "用户名不合法,必须在3-15位之间");     }     //校验密码     String pwd=user.getPwd();     if(StringUtil.isEmpty(pwd)){         this.addFieldError("pwd", "密码不可为空");     }else if(!pwd.matches("\\w{3,15}")){         this.addFieldError("pwd", "密码不合法,必须在3-15位之间");     }else{//加密         user.setPwd(MD5Util.encode(pwd.trim()));     }    /*  private String email;// 邮箱        private String phone;//电话*/        //校验邮箱     String email=user.getEmail();     if(StringUtil.isEmpty(email)){         this.addFieldError("email", "邮箱不可为空");     }else if(!email.matches("[a-zA-Z0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,3}){1,3}")){         this.addFieldError("email", "邮箱不合法");     }     //校验电话     String phone=user.getPhone();     if(StringUtil.isEmpty(phone)){         this.addFieldError("phone", "电话不可为空");     }else if(!phone.matches("1[358]\\d{9}")){         this.addFieldError("phone", "电话不合法");     }    }    /**     * @return 注册方法     */     @InputConfig(resultName="regist")    public String regist(){        try {            userService.regist(user);            //注册成功返回注首页            ActionContext.getContext().put("msg", "注册成功");            return "success";        } catch (UserException e) {            ActionContext.getContext().put("msg", e.getMessage());            //不成功返回注册页面            return "regist";        }       }    /**     * @return 登录方法     */    @InputConfig(resultName="login")    public String login(){        try {            userService.login(user);            ActionContext.getContext().put("msg", "登录成功");            //登录成功返回首页            return "success";        } catch (UserException e) {            ActionContext.getContext().put("msg", e.getMessage());            //登录成功返回登录页面            return "login";        }       }     public void validateLogin() {         String username=user.getUsername();         //校验用户名         if(StringUtil.isEmpty(username)){            this.addFieldError("username", "用户名不可为空");         }else if(!username.matches("\\w{3,15}")){             this.addFieldError("username", "用户名不合法,必须在3-15位之间");         }         //校验密码         String pwd=user.getPwd();         if(StringUtil.isEmpty(pwd)){             this.addFieldError("pwd", "密码不可为空");         }else if(!pwd.matches("\\w{3,15}")){             this.addFieldError("pwd", "密码不合法,必须在3-15位之间");         }     }/*  public static void main(String[] args) {        System.out.println("1349226925@qq.com".matches("[a-zA-Z0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,3}){1,3}"));        String[] s={"1"};        Object obj=s;        System.out.println(s);    }*/}

这样就可以实现多个校验方法对应多个input视图了,xml中不必须配置input

当然你如果使用一个action对应一个方法就没有这种问题,但是无疑增加了很多代码

0 0
原创粉丝点击