傅型号值问题:

首先须要说明的是: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 模型分配问题和延迟加载问题的更多相关文章

  1. EF 延迟加载和预先加载

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨延迟加载和预先加载 Entity Frame ...

  2. SpringMVC与Struts2配置区别

     Spring MVC模型与Struts2模型应用:  Html表单: 上述这两段代码无论是SpringMVC还是Struts2,都可以共用.而在请求响应处理类(也就是Controller)上的设计差 ...

  3. Struts2工作原理及流程

    Struts2是基于MVC设计模式的JavaWeb 框架技术. 基于Struts2开发Java Web项目的主要步骤如下: (1)在web.xml中配置FilterDispatcher. (2)设计和 ...

  4. Spring第三天

    Spring第三天 整体课程安排(3天+2天): 第一天:Spring框架入门.IoC控制反转的配置管理.Spring Web集成.Spring Junit集成. 第二天:Spring AOP面向切面 ...

  5. struts2接收参数——域模型、DTO

    在开始介绍域模型之前我们要明白一点,为什么通过域模型我们可以把参数这么方便的在后台接收. 那是因为 通过参数拦截器(params interceptor)自动的把前台传过来的参数给域对象(domain ...

  6. 关于在Struts2的Action中使用domain模型接收参数的问题

    最近在搭建一个最新的ssh2框架,今天在调试的时候,发现了一个以前一直没有注意过的问题,我在Action中使用域模型的方式去接收jsp画面中的参数的时候,发现参数总是接收不完,头一次遇到这种问题,现在 ...

  7. ---web模型 --mvc和模型--struts2 入门

    关于web模型: 早期的web 应用主要是静态页丽的浏览〈如新闻的制监),随着Internet的发展,web应用也变得越来越复杂,不仅要 和数据库进行交互 ,还要和用户进行交互,由此衍生了各种服务器端 ...

  8. struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象

    struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...

  9. struts2属性驱动模型

    属性驱动模型的作用: 因为struts2与servlet API 实现了解耦,无法直接使用HttpServlet Request对象获取表单提交的参数,但Struts2提供了属性驱动模型机制来解决这个 ...

随机推荐

  1. UVA 11769 All Souls Night 的三维凸包要求的表面面积

    主题链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=2869">点击打开链接 求给定的 ...

  2. 使用 node-inspector 调试 Node.js

    大部分基于 Node.js 的应用都是执行在浏览器中的, 比如强大的调试工具 node-inspector. node-inspector 是一个全然基于 Node.js 的开源在线调试工具,提供了强 ...

  3. axWindowsMediaPlayer1获取音频长度

    OpenFileDialog openFileDialog1 = new OpenFileDialog { InitialDirectory = "c:\\", Filter = ...

  4. 百度音乐搜索API介绍

    百度音乐搜索API的请求地址如下: [html] view plaincopy http://box.zhangmen.baidu.com/x?op=12&count=1&title= ...

  5. Session小案例------完成用户登录

    Session小案例------完成用户登录     在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...

  6. ASP.NET vNext or .NET vNext?

    ASP.NET vNext or .NET vNext? 从概念和基础开始 vNext在曝光以来绝大多数以ASP.NET vNext这样的的字眼出现,为什么这边会提及.NET vNext?原因是我认为 ...

  7. Windows Phone 8 应用内截图

    WriteableBitmap wb = new WriteableBitmap(this.LayoutRoot, new MatrixTransform()); //wb.Render(this.L ...

  8. oracle_控制用户权限

     oracle_控制用户权限 ①对 限制     数据库安全:     系统安全     数据安全性     系统权限: 对于数据库的权限     对象权限: 操作数据库对象的权限 1.系统权限 ...

  9. Xcode的小标记旁边的文件的名称的作用

    这两天老板教我要注意Xcode该文件名以小标记权.例如: 这里的M就是Xcode中类名旁边的一个symbol.还有A,D等,这些标记用于显示当前文件和代码仓库中该文件对照后的状态: M = Local ...

  10. Visual FoxPro 6.0~9.0解决方案和实例文档和CD写入原件下载

    自从微软宣布开发冻结Visual FoxPro之后,这样的图书出版已经成为一个问题,但仍有不少VFP小贴士.处处留心此8历史书.在此提供写作的原稿.它看起来非常舒服比扫描版淘宝.下载链接:http:/ ...