您的位置:首页 > 编程语言 > Java开发

Structs2中的prepare和Spring中的scope="prototype“的功能和作用

2014-08-24 19:43 337 查看
Structs2中的Preparable接口

Structs2的Action在实现com.opensymphony.xwork2.Preparable接口后,可以重写prepare()方法,此时在Action中,prepare()方法的执行点是在:setXxx()和execute()的执行之前。

比如需求:在执行Action的方法前,接收前台隐藏域传过来的值,再根据该值执行相应逻辑

如前台传过来ID,我们根据ID查找数据库对应的用户信息,再跳转到modify()中修改信息

但实际的运行过程中发现,通过Debug断点调试得知prepare()方法接收到的ID值是零

即前台隐藏域中的ID值没有传过来,事实上问题就出在默认的defaultStack拦截器栈

其实defaultStack无法接收prepare()需要的数据,而应借助paramsPrepareParamsStack拦截器栈

事实上使用prepare拦截器之前,应先调用params拦截器,prepare()才能接收到表单数据

基于这个思路,于是可以通过各种手段将params拦截器放置在prepare拦截器之前即可

比如将defaultStack中的所有拦截器拷贝struts.xml的我们自定义的myStack拦截器栈

再按照paramsPrepareParamsStack拦截器栈中的paramsprepare顺序修改二者位置即可

最近读starting struts2 online,里面有一节Move CRUD Operations into the same Action,提供了Move CRUD Operations into the same Action大概的sample,于是进行了补充,记录下来,以备使用。

一、思路

在这本书里,lan roughley提到在结合preparable和ModenDriven拦截器实现Move CRUD Operations into the same Action,采用通配符的方式为所有的crud只写一个action配置,当然,这也要求相关文件的命名和目录组织

摘抄自:http://blog.csdn.net/yangqicong/article/details/6869980
Spring 中的scope="prototype"属性

Spring默认的scope是单例模式(singleton),这样只会创建一个Action对象,每次访问的都是同一个Action对象,数据不安全。

Structs2要求,每次访问都对应不同的Action,scope=”prototype“(原型模式)可以保证,当有请求时,都创建一个Action对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: