struts2 模型分配问题和延迟加载问题
傅型号值问题:
首先须要说明的是:Action在请求到达ActionProxy时已经创建出来了,而且对应的创建了一个值栈。
在拦截器到达之前这个图片已经OK了。Action已经创建。并且压入了值栈vs,并且model对象也已经初始化。
模型驱动(ModelDriven)从Action取出模型对象并把它压入栈顶
在运行全然部的拦截器后開始调用Action方法,并对模型进行赋值。(这个从service取出的新模型对象并未压入值栈)可是此时值栈中的模型对象还是旧模型,所以jsp中引用的还是旧模型的对象(旧模型中是一个初始化后并未赋值的对象)。
struts2的action中为model赋值的问题:
---------------------------------------
1.手动压栈.
1.耦合度高.
2.不推荐直接操作vs
3.栈中的模型对象过多
valueStack.push(newModel);
2.通过手动将新模型的属性所有赋值给旧模型.
性能比較差
oldModel.setXxxx(newModel.getXxxx());
...
3.使用paramsPrepareParamsStack + preparable拦截器配合使用
prepare拦截器先运行,先为model赋值,后调用modelDriven,在栈顶压入的model是新模型,
可是须要主要在prepare拦截器还要进行传递參数,defaultstack在prepare不能完毕传參,
因此能够改换成paramsPrepareParamsStack来达到此目的.
4.使用刷新机制,进行赋值,直接在action中为model赋值,使用刷新机制就可以.
<interceptors>
<!-- 注冊登陆拦截器 -->
<interceptor name="loginInterceptor" class="com.atguigu.surveypark.struts2.interceptor.LoginInterceptor" />
<!-- 定义拦截器栈 -->s
<interceptor-stack name="surveyparkStack">
<interceptor-ref name="loginInterceptor" />
<interceptor-ref name="defaultStack">
<param name="modelDriven.refreshModelBeforeResult">true</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
懒载入异常:
由于是在Service层面上加的事务管理,全部在Service运行完后Session关闭。连接断开,所以在取得对象的集合属性(如一对多关联关系时,多的那方的集合属性可能设置成延迟载入(默认:延迟载入),即等到用到时再进行初始化),这种话进入JSP进行取值的时候会拿不到这些值。
1.不用懒载入
2.一劳永逸解决懒载入问题.使用spring的openSessionInViewFilter.
<!-- openSessionInViewFilter,改过滤器在view渲染时始终开启session,一劳永逸解决hibernate的懒载入问题,
该过滤器必须配置在struts2过滤器之前,不推荐使用(性能问题)
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
3.强行在service层面是初始化代理对象.
public Survey getSurveyWithChildren(Integer sid){
//Survey s = surveyDao.getEntity(sid);
//减少耦合度
Survey s = this.getSurvey(sid);
//强行初始化pages和questions集合
for(Page p : s.getPages()){
p.getQuestions().size();
}
return s;
}
高内聚,低耦合.
版权声明:本文博客原创文章,博客,未经同意,不得转载。
struts2 模型分配问题和延迟加载问题的更多相关文章
- EF 延迟加载和预先加载
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨延迟加载和预先加载 Entity Frame ...
- SpringMVC与Struts2配置区别
Spring MVC模型与Struts2模型应用: Html表单: 上述这两段代码无论是SpringMVC还是Struts2,都可以共用.而在请求响应处理类(也就是Controller)上的设计差 ...
- Struts2工作原理及流程
Struts2是基于MVC设计模式的JavaWeb 框架技术. 基于Struts2开发Java Web项目的主要步骤如下: (1)在web.xml中配置FilterDispatcher. (2)设计和 ...
- Spring第三天
Spring第三天 整体课程安排(3天+2天): 第一天:Spring框架入门.IoC控制反转的配置管理.Spring Web集成.Spring Junit集成. 第二天:Spring AOP面向切面 ...
- struts2接收参数——域模型、DTO
在开始介绍域模型之前我们要明白一点,为什么通过域模型我们可以把参数这么方便的在后台接收. 那是因为 通过参数拦截器(params interceptor)自动的把前台传过来的参数给域对象(domain ...
- 关于在Struts2的Action中使用domain模型接收参数的问题
最近在搭建一个最新的ssh2框架,今天在调试的时候,发现了一个以前一直没有注意过的问题,我在Action中使用域模型的方式去接收jsp画面中的参数的时候,发现参数总是接收不完,头一次遇到这种问题,现在 ...
- ---web模型 --mvc和模型--struts2 入门
关于web模型: 早期的web 应用主要是静态页丽的浏览〈如新闻的制监),随着Internet的发展,web应用也变得越来越复杂,不仅要 和数据库进行交互 ,还要和用户进行交互,由此衍生了各种服务器端 ...
- struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象
struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...
- struts2属性驱动模型
属性驱动模型的作用: 因为struts2与servlet API 实现了解耦,无法直接使用HttpServlet Request对象获取表单提交的参数,但Struts2提供了属性驱动模型机制来解决这个 ...
随机推荐
- 【最小割】HDU 4971 A simple brute force problem.
说是最大权闭合图.... 比赛时没敢写.... 题意 一共同拥有n个任务,m个技术 完毕一个任务可盈利一些钱,学习一个技术要花费钱 完毕某个任务前须要先学习某几个技术 可是可能在学习一个任务前须要学习 ...
- POJ9384 迷宫(基金会BFS)
本文来源于:http://blog.csdn.net/svitter 称号:让你从(0, 0)走到(4,4).而且输出路径. 输入数据:二位数组的迷宫:输出数据:路径: 题解:简单的BFS 注意: 1 ...
- TCP与UDP的侵略性
HTTP必须执行在TCP上吗?SSL必须执行在TCP上吗?...实际上HTTP并没有规定一定要执行在TCP上,甚至FTP也不一定要执行在TCP上!HTTP或者FTP仅仅是说底层信道要保证数据的按序传输 ...
- JAVA中的super和this关键字的使用
一 this关键字 this关键字可以出现在构造方法和实例方法中,不能出现在静态方法中,这是因为静态方法可以用类名来调用,这时可能还没有任何对象诞生. this主要有两种用法: 1 用在构造方法中,调 ...
- HDU 4916 树形dp
Count on the path Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 它们的定义actionbar 并删除留空
通过他们自己的定义actionbar布局变化actionbar样式,简单而美丽.但有一个细节需要注意的是,高分辨率的问题留空.一般720上述决议,下一次你发现,无论什么样的变化总是会有一个小的布局文件 ...
- IOS-Plist文件存储(1)
1.什么是一个文件系统? IOS每个应用程序都有自己的文件系统.并且有一个相应的接入,一般分 ~/Documents/ ~/tmp/ ~/Library/Caches/ ~/Library/Prefe ...
- 全栈JavaScript路(八)得知 CDATASection 种类 节点
CDATASection 只船舶类型节点 基于XML 文件.演出CDATA 数据. 构造函数: CDATASection function(){[native code]} CDATASection ...
- struts2-dojo-plugin-2.3.1.2.jar!/struts-plugin.xml:29:119
Unable to load configuration. - bean - jar:file:/D:/code_workspace/SSHWorkSpace3/.metadata/.plugins/ ...
- 【代码优化】当许多构造函数的参数,请考虑使用builder模式
静态工厂和构造具有共同的局限性:我们不能扩展到大量的非常好的可选参数. 1.对于多个可选參数的构造器.我们都习惯採用重叠构造器模式.比方一个參数的构造器调用2个參数的构造器. 2个參数的构造器 ...