action中model对象的赋值问题
来源:互联网 发布:到印度做软件 编辑:程序博客网 时间:2024/05/29 15:07
1. 关于action
Struts2会为每个处理线程分配一个Action对象,将提交的参数注入到Action属性中,并调用Action的相关方法如execute()等完成业务逻辑,因此struts2的Action会有多个对象。处理完毕,线程结束,Action也会被抛弃,Struts2的Action是线程安全的。
当Struts单独使用时action使用Struts2自己负责;当使用Spring+Struts联合使用时,action实例使用Spring负责创建。两种情况下的配置文件也略有不同。
1.Struts单独使用时,配置中action的class属性属于全路径名。
2.当和Spring联合使用时,class属性属于相应bean的id.
2. action中模型(model)对象的赋值
model对象在action的初始化(拦截器执行之前已经初始化完毕)过程中被创建(通过action的构造函数)。当通过ModeDriven拦截器时,通过调用getModel()方法将model压入值栈。当调用action中的业务逻辑方法(如:designSurvey()方法)时,需要给模型对象赋值。但此时值栈中的模型对象仍是旧对象,所以涉及到model对象的赋值问题。
public Survey designSurvey() { this.model = surveyService(sid);return "designSurveyPage";}
2.1 使用paramsPrepareParamsStack和prepare拦截器
通过配置paramsPrepareParamsStack(prepare拦截器在ModeDriven拦截器之前)。使用prepare拦截器直接新模型对象赋给action中的模型。
public void prepareDesignSurvey(){this.model = surveyService.getSurveyWithChildren(sid);}
@Overridepublic Survey getSurvey(Integer sid) {return surveyDao.getEntity(sid);}/** * 设计调查 */@Overridepublic Survey getSurveyWithChildren(Integer sid) {// 使用this.getSurvey()方法而不直接使用getEntity()方法体现的高内聚低耦合的思想,因为//此处设计service和dao两个组件之间的调用,如果是组件内部可以之间完成的功能就不要调用另一组件的方法Survey s = this.getSurvey(sid);for(Page p : s.getPages()){p.getQuestions().size();}return s;}
此方法性能不好,因为当有多个model时就需要多个prepareXxx()方法,造成方法爆炸。
2.2 通过刷新机制
通过配置ModelDriven拦截器中refreshModelBeforeResult属性为true来实现当发现model为新model时自动刷新(可参考ModelDrivenInterface源代码),一般采用此种方法。
<interceptors ><!-- 注册登录拦截器 --><interceptor name="LoginInterceptor" class="com.xie.surveypark.struts2.interceptor.LoginInterceptor"></interceptor><!-- 定义拦截器栈 --><interceptor-stack name="mySurveyparkStack"> <interceptor-ref name="LoginInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"> <param name="modelDriven.refreshModelBeforeResult">true</param> </interceptor-ref></interceptor-stack></interceptors>
- action中model对象的赋值问题
- List中对象model的排序问题
- struts2中JSP页面给action类赋值的问题
- SSH action 中通过'.',无法给action中对象赋值
- Struts2 中取得model对象中的对象的值问题
- yii中model的attributes属性不能赋值
- jQuery中给form表单中action赋值的方法
- 自定义Struts2的拦截器&自定义UserAware接口&Action中模型赋值问题&Hibernate懒加载问题
- Struts2中Action接收参数的方法:属性,Model,ModelDriver
- Struts2中Action接收参数的方法:属性,Model,ModelDriver
- 关于struts2里action的name属性赋值问题
- 使用Json字符串对model对象赋值
- Struts2中Action属性的值的赋值时机
- ThinkPHP中Model类的对象生命周期
- Java对象赋值引发的问题
- java对象赋值的“别名”问题
- JAVA中对象赋值与主数据类型赋值的区别
- CodeIgniter 一个Model中调用另一个Model的问题
- Could not find main method from given launch configuration
- svn: E200033: database is locked解决办法。(转)
- CardView 添加背景图片、改变颜色、水波纹效果的方法
- Linux联网配置
- Markdown编辑器LaTeX 公式
- action中model对象的赋值问题
- project tango sdk 下载地址,虚拟现实AR VR MR 开发第一步,下源码 找sdk
- .bat延时操作
- 彻底删除免安装版mysql
- PHP-计算器
- H.264中NALU、RBSP、SODB的关系 (弄清码流结构)
- Spring AOP capabilities and goals
- SSM框架——详细整合教程(Spring 4.0.2+SpringMVC 4.0.2+MyBatis3.2.6)
- Linux基本命令练习(2)