首页 > 代码库 > Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题
Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题
最近在知乎看到一句话,保持学习的有一种是你看到了更多的牛人,不甘心,真的不甘心。
Spring和hibernate整合的时候,jsp页面做展现,发现展现属性出现:
org.apache.jasper.JasperException: could not initialize proxy - no Session - Class: org.hibernate.proxy.AbstractLazyInitializer
File: AbstractLazyInitializer.java
no session,懒加载,加入jsp页面展现的name这样的一个属性,其实是用getName这样的方法去拿到的,但是session已经关闭了。File: AbstractLazyInitializer.java
解决的办法就是就是写多一个filter,名字也很直观
<filter> <filter-name >openSessionInview </filter-name> <filter-class >org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class> </filter > <filter-mapping > <filter-name> openSessionInview</filter-name > <url-pattern> /*</ url-pattern> </filter-mapping >
在展现层打开session,当然要写在struts的过滤之前,因为责任链的存在,先读取的反而是后实现的。
就在觉得配完之后没问题的时候,有一个问题出现了,发现sessionFactory没有注入,因为我sessionFactory的id给我简写成sf,然后就猜到,应该是OpenSessionInViewFilter这个类需要注入sessionFactory,该类也有get方法,但是名字不匹配,所以注入失败。
后面尝试用
<bean id="openSessionInview" class="org.springframework.orm.hibernate3.support.OpenSessionInViewFilter "> <property name="sessionFactory" ref="sf"></property> </bean>
当然不行,后面查了一下。正确的配置是在web.xml中初始化。
<filter> <filter-name >openSessionInview </filter-name> <filter-class >org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class> <init-param > <param-name> sessionFactoryBeanName</param-name > <param-value> sf</param-value > </init-param > </filter > <filter-mapping > <filter-name> openSessionInview</filter-name > <url-pattern> /*</ url-pattern> </filter-mapping >
最后,成功地在jsp页面展现了name属性。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。