Struts2验证框架无法显示错误提示的解决方案

mac2022-06-30  22

问题描述:

在教学过程中突然遇到使用struts2的验证框架时,当输入的内容不符合验证规则时,没有进入action(说明验证的拦截器生效了),但是在页面却没有显示错误提示信息,很郁闷调了很久终于发现问题...

部分代码:

<html> <body> <s:form action="Validate" method="post" > <s:textfield label="用户名" name="user.name" /> <s:textfield label="密码" name="user.pwd"/> <s:submit value="提交" /> </s:form> </body> </html> 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"> <validators> <field name="user.name"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>请输入用户名</message> </field-validator> </field> </validators> ValidateAction-validation.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="default" extends="struts-default" namespace="/"> <action name="Validate" class="com.jb.cdjj.web.actions.ValidateAction"> <result>/index.jsp</result> <result name="input" type="redirect">/validate.jsp</result> </action> </package> </struts> struts.xml

解决方案:

将struts.xml中result的type属性去掉,或使用默认的dispatcher方式.

原理在于验证框架会把错误信息注入到ValueStack的根对象中,而采用redirect重定向方式相当于用户又发起了新的请求,当然无法共享上次请求对应的ValueStack对象.

可以通过struts的debug标签看到这一过程:

转载于:https://www.cnblogs.com/kknd713/p/3144009.html

相关资源:Comparing the Struts 1 and Struts 2 Web Application Frameworks
最新回复(0)