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>