问题描述:
在教学过程中突然遇到使用struts2的验证框架时,当输入的内容不符合验证规则时,没有进入action(说明验证的拦截器生效了),但是在页面却没有显示错误提示信息,很郁闷调了很久终于发现问题…
部分代码:
index.jsp
public class ValidateAction extends ActionSupport{private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String execute() throws Exception {System.out.println(“进入action”);return super.execute();}}
ValidateAction.java
public class User implements Serializable{private String name;private String pwd;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}}
User.java
<!DOCTYPE validators PUBLIC”-//OpenSymphony Group//XWork Validator 1.0.2//EN””http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd”true请输入用户名
ValidateAction-validation.xml
DOCTYPE struts PUBLIC”-//Apache Software Foundation//DTD Struts Configuration 2.1//EN””http://struts.apache.org/dtds/struts-2.1.dtd”/index.jsp/validate.jsp
struts.xml
解决方案:
将struts.xml中result的type属性去掉,或使用默认的dispatcher方式.
原理在于验证框架会把错误信息注入到ValueStack的根对象中,而采用redirect重定向方式相当于用户又发起了新的请求,当然无法共享上次请求对应的ValueStack对象.
可以通过struts的debug标签看到这一过程:
,免备案空间,香港服务器租用,香港虚拟主机你的脸是为了呈现上帝赐给人类最贵重的礼物–微笑,一定要成为你工作最大的资产。