2009年6月29日星期一

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,他任然会保留上次访问的过记录的信息。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值