解决hibernate 设置为lazy=“true”的集合,通过struts1 访问的时候报session已经关闭的问题
在使用struts1 + hibernate(Struts2没有这问题)过程中,经常要访问lazy="true"的集合类型属性,可是这时候报session已经关闭的现象。
要解决这个问题我们要分析OpenSessionInViewFilter这个类。?OpenSessionInViewFilter是按照WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE这个key去获取spring配置信息的! 所以,我们在使用过程中配置OpenSessionInViewFilter就不起作用。
解决方法:?修改ContextLoaderPlugIn代码,在getServletContext().setAttribute(attrName, wac);这个地方加上一行代码: ?getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac); ?
?或者
修改OpenSessionInViewFilter,让它按照attrName去取得spring配置。?
我们按照第一种方法来配置
1.重写struts的插件继承自spring的ContextLoaderPlugIn?的类。
?3.更改struts-config.xml?
??