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已经关闭了。


解决的办法就是就是写多一个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属性。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iaiti

赏顿早餐钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值