Struts2在与Spring2.X整合后,做服务器验证时,由于Spring2.X的singleton,所以会反复填充FieldError。但这不是我们想要的结果。而网上有些设定单个BEAN的生命周期为request,问题会解决,但会引起性能上的问题。
编写网上的方法,写一个拦截器和一些配置来完成问题的解决
1、编写拦截器
package Interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class ClearFiledErrorInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation arg0) throws Exception {
ActionSupport actionsupport = (ActionSupport)arg0.getAction();
actionsupport.clearErrorsAndMessages();
String result = arg0.invoke();
return result;
}
}
2、对web.xml进行配置
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener </listener-class>
</listener>
3、对Struts.xml在package包下加入以下配置
<interceptors>
<interceptor name="clearFieldError" class="Interceptor.ClearFiledErrorInterceptor"></interceptor>
<interceptor-stack name="myDefaultInterceptor">
<interceptor-ref name="clearFieldError"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultInterceptor"></default-interceptor-ref>
4、最后将每个action类的生命周期设置为session,表示为一个session只创建一个action实例,代码片段:
<bean id="Test" class="action.base.TestAction" scope="session"></bean>
本文介绍了解决Struts2与Spring2.X整合后服务器验证重复填充FieldError的问题。通过编写自定义拦截器并结合配置调整,实现了有效的错误消息清理,并优化了性能。

被折叠的 条评论
为什么被折叠?



