2009年6月29日星期一

来源:互联网 发布:中国银行mac企业网银 编辑:程序博客网 时间:2024/05/01 12:36

Struts1中,Action默认是独立的

Struts2中,Action默认是是独立使用的(Struts2中的变量是全局变量)

但是Spring 管理Struts2时,默认scope="singleton",意思是Struts2的Action是公用的

所以在Spring 和Struts2配合使用时,必须是scope="prototype",这样就是独立的了。

 

以下是资料

----------------------------------------------------------------------------------------------------------------------

struts的配置文件中可以设置action对象的声明周期,但是struts2是不行的。
struts2是从webwork发展而来的,xwork有一个objectfacotry类,这个工厂类有一个线程池thSelf
=========
private static ThreadLocal<ObjectFactory> thSelf
action对象就是由这个线程池来维护的,所以如果你想知道它的生命周期是如何,可以查看这个类(com.opensymphony.xwork2.ObjectFactory)源代码。

通常和spring整合使用的时候,在struts.xml文件要配置一个元素
<constant name="struts.objectFactory" value="spring" />
或者在struts.property文件中配置
struts.objectFactory = spring

这样,我们可以在spring的配置文件中的bean元素里用一个scope属性来配置action是用什么生命周期,singleton,prototype,request,session等等

 

--------------------------------------------------------------------------------------------------------------------

下面是struts2+hibernate+spring配置文件的一部分,以前都是仿造已经写好的bean的配置。有一次 scope="prototype"忘记写了结果出了问题
项目中对一个表的增删该操作是用一个action,这个action有add,update,delete,save这些方法,添加和修改是共用一个页面,当页面得到id时代表进行的修改操作,反之是添加操作。因为在配置spring的bean是忘了写scope="prototype"所以每次添加时都显示最后一次访问过的记录
找了很长时间,原来是spring bean出了问题。 scope="prototype" 会在该类型的对象被请求时创建一个新的action对象。如果没有配置scope=prototype则添加的时候不会新建一个action,他任然会保留上次访问的过记录的信息。

--------------------------------------------------------------------------------------------------------------------

 

原创粉丝点击