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对应一个方法就没有这种问题,但是无疑增加了很多代码
- Struts2处理多个input试图处理的问题
- struts2 中同一个action的实现中对应多个input的处理方法
- struts2中文问题的处理
- 关于struts2中s:form标签不能处理多个s:submit的问题
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射 (
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- 关于结果处理类型input的代码演示-深入Struts2
- Struts2一个action处理多个方法的语法格式
- struts2处理一个form多个submit
- Struts2 处理一个form多个submit
- Struts2 处理一个form多个submit
- Struts2 处理一个form多个submit
- Struts2 - 处理一个form多个submit
- struts2 多个提交按钮处理
- 深入理解Java的接口和抽象类
- SwipeMenuListView,一个简单的左滑操作
- case when 写在where条件中
- iOS 客户端基于 WebP 图片格式的流量优化(上)
- SpringMVC 之 表单标签
- Struts2处理多个input试图处理的问题
- WampServer 允许外网访问
- python 文件批处理
- 互联网人必读 | 大数据思维的十大核心原理
- 点击穿透
- LayoutParams——RelativeLayout.LayoutParams.addRule()方法在代码中设置RelativeLayout相关属性
- java 学习体会
- 类模板及派生
- js 实现数值的千分位及四舍五入保存小数方法