struts2 整合spring,问题及特性

天做SSH2提交登录的时候,表单验证失败后,无法再提交(进入不了action)

【资料】

struts2和spring的一些特点:
       1) Struts2 会对每一个请求,产生一个Action的实例来处理.

2) Spring的Ioc容器管理的bean默认是单实例的.
当Struts2与Spring整合后,由spring来管理Struts2的Action,会遇到什么问题 ?如何解决 ?

 


Struts2与Spring整合后, 由spring来管理Struts2的Action,   bean默认是单实例有情况下,会有如下问题:

1) Action是单例,其中的FieldError,actionerror中的错误信息 会累加, 即使再次输入了正确的信息,也过不了验证.

2) Struts2的Action是有状态的,他有自己的成员属性, 所以在多线程下,会有问题.

 

如何解决?

 
方案一: 就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个实例.
方案二: spring中bean的作用域设为session ,每个session对应一个实例,解决了多线程问题。再写一个拦截器,  清空

           FieldError与actionerror

public class ClearFieldErrorInterceptor extends AbstractInterceptor{ @Override 
                   public String intercept(ActionInvocation invocation)throws Exception { 
                               ActionSupport actionSupport = (ActionSupport)invocation.getAction(); 
                               actionSupport.clearErrorsAndMessages(); 
                               String resultCode = invocation.invoke(); 
                               return resultCode; 
                  } 
     }

posted @ 2013-11-28 13:19  蓝色的眼泪  阅读(118)  评论(0)    收藏  举报