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>