用业务层调用DAO的方法取得数据后放在List中,并且把List传给前台页面时,有错 Could not initialize proxy - the owning Session was closed!
是由hibernate的lazy机制导制的,详细情况我就不多说了,网上有很多这方面的资料
解决办法1,就是在many-to-one 中加入 lazy="false" ,这个方法我试过,行的通
解决办法2,在web.xml文件中配置filter来解决.
<!-- hibernate session filter -->
< filter >
< filter-name > hibernateFilter </ filter-name >
< filter-class > org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</ filter-class >
</ filter >
< filter-mapping >
< filter-name > hibernateFilter </ filter-name >
< url-pattern > *.do </ url-pattern >
</ filter-mapping >
我们的系统架构是struts+spring+hibernate,struts跟spring的整合是在struts-config.xml里加了个plugin:
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="classpath*:spring/**/*.xml" />
</plug-in>
在web.xml中配置hibernateFilter 后,还需要在struts-config.xml里把plugin去掉,在web.xml里加上如下代码:
<!--Spring ApplicationContext-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/**/*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
但此方法还没有试过。
听说还有几个方法可以解决