struts2对Action的作用域的管理

需要把scope设定为prototype吧?否则就是默认的单例模式啊!我看到书上的例子居然不修改bean的作用域,这不是严重违背struts2的设计原则吗?struts2与1的区别之一就是修改了action的生成模式。

问题补充:
jiang5495 写道
在spring接管struts2的 action后, 
要spring配制其beans属性时,是有scope属性的,且默认是单例的, 

要验证这一点很简单, 
只在写一个简单的登陆验证程序,而ACtion负责逻辑验证,当然逻辑验证你可以 
写得很简单,你会发现只要你提交错了一次之后,再输入正确的数据也提交不了. 

再试着把scope的属性改为prototype就可以了,你可以去试试


感谢您的回答,就您所说的情况提出一点自己的看法。 

我认为,即使scope是单例的,负责逻辑验证也不会出现“提交错一次,再输入正确的数据也无法提交”的情况。因为虽然不会生成新的action实例,但是后面提交的数据总是会覆盖掉前面的数据;我做了测试,发现即使不指明scope,也就是单例的默认scope,也是可以正常登录的。不知道是我误解了你的意思,还是我使用了错误的验证方法。 

感谢您的回答,我比较赞同您关于默认单例的判断。希望你能够对我提出的这个问题给与解释,谢谢!

问题补充:
jiang5495 写道
在spring接管struts2的 action后, 
要spring配制其beans属性时,是有scope属性的,且默认是单例的, 

要验证这一点很简单, 
只在写一个简单的登陆验证程序,而ACtion负责逻辑验证,当然逻辑验证你可以 
写得很简单,你会发现只要你提交错了一次之后,再输入正确的数据也提交不了. 

再试着把scope的属性改为prototype就可以了,你可以去试试

您的一次我明白了,逻辑验证,而不是登录验证,也就是数据转换出现异常 

您的回答是正确的,对我帮助很大,非常感谢!
我曾经把action的作用域设置成session但会出现找不到action的错误,这样的错误可能是数据转换异常而引起的,那时候的解决方案是在action里添加 @Override
public void prepare() throws Exception {
clearErrorsAndMessages();

}此方法继承自Preparable
建议还是把Action的作用域设置成propetype 在junit测试中scope为session不能实例化action对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值