java - 用户界面 :repeat inside a ui:repeat and LazyInitException

标签 java exception jsf transactional

我目前遇到了 LazyInitException,页面包含如下代码:

<h:form>
<ui:repeat value="#{searchBean.storiesByTag}" var="iStory">
<ui:repeat value="{iStory.tags}"var="iTag">      
<!-- Lazy init exception here -->
#{iTag.content}
</ui:repeat>
</ui:repeat>
</h:form>

storiesByTag()是一个检索 List 的 bean 方法的故事。第二个ui:repeat然后应该获取每个标签并显示其内容。默认情况下,所有获取都是惰性的,以避免加载超出必要数量的对象。

我对此仍然很模糊,但据我了解,这种情况可能会发生,因为 EntityManager在请求或 @Transactional 期间关闭(从 Collection 云退出)正在访问。

Spring 的OpenEntityManagerInViewFilter from Spring 已添加到项目中,但我不确定它是否正确完成工作。欢迎提出任何测试建议。

因为我假设 Collection是这里的问题我想知道什么是一个好的解决方案。我应该用 fetch join 修改 DAO 方法吗? ?或者我应该使用 <f:view beforePhaseListener=...> 采取黑客路线触发 bean 内的方法并从数据库获取一些新的 Tag 对象?

编辑:对于博佐:

web.xml:

<!-- Open EM in View Filter -->

<filter>
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- End -->

对于罗马:

applicationContext.xml:

<!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
        p:entityManagerFactory-ref="entityManagerFactory"/>

最佳答案

您的实体管理器工厂的名称是什么?

来自 OpenEntityManagerInView 文档:

Looks up the EntityManagerFactory in Spring's root web application context. Supports a "entityManagerFactoryBeanName" filter init-param in web.xml; the default bean name is "entityManagerFactory".

如果您指定的名称与“entityManagerFactory”不同,则过滤器看不到您的工厂。

关于java - 用户界面 :repeat inside a ui:repeat and LazyInitException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2385858/

相关文章:

java - GWT RequestFactory + ServiceLocator 错误

java - 如何使用 Rhino 库在 Java 中使用 javascript 代码?

java - 使用 `new EdgeOptions()` 优于 `DesiredCapabilities.edge()` 通过 Jenkins 和 Selenium 启动远程 Microsoft Edge 浏览器错误

Python列表和类型错误

java - 如何像spring mvc一样设置动态变量并将其传递给JSF?

java - 这个 JSF EL 语句有什么问题?

java - Spring MVC 中 Controller 类未重新初始化

java - 字符串索引超出范围 : 0 Error For using RedirectAttributes in Spring Boot

c# - 我应该捕获所有可能的特定异常还是只是一般异常并将其包装在自定义异常中?

JSF UTF 8 个字符只在第一个表单帖子、jsf、tomcat 中没有看到?