OpenSessionInViewFilter +Redirect in JSF



我有一个使用Spring和Hibernate的JSF 2.1应用程序。

为了解决懒惰加载问题,我使用OpenSessionInView过滤器。

<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>

一切正常,我的懒惰类被启动,但当我使用导航规则与重定向

 <navigation-rule>
   <from-view-id>/index.xhtml</from-view-id>
   <navigation-case>
       <from-outcome>fail</from-outcome>
       <to-view-id>/index.xhtml</to-view-id>
       <redirect />
   </navigation-case>
</navigation-rule>

我得到org.hibernate.LazyInitializationException: id我删除<redirect />标签一切工作正常。

为什么?是因为新视图已经创建了吗?那么为什么我要有新的Hibernate会话呢?还有别的办法吗?

<redirect />是通过向浏览器返回301(或303)响应代码来实现的,因此完成当前请求并关闭当前(Hibernate)会话。

浏览器然后向提供的URL提交一个新的请求,导致一个全新的(Hibernate)会话,您尚未初始化的实体不会绑定到该会话。

你需要在重定向之前手动触发现有请求的初始化(如果可能的话),或者在重定向之后重新获取所有必要的实体。

相关内容

  • 没有找到相关文章