Jsf 在流程验证时选择ManyCheckBox LazyInitializationException
如果您使用由hibernate代理的集合支持的selectManyCheckbox,您将遇到可怕的LazyInitializationException问题。这与支持bean的状态无关 在调试Mojarra 2.1之后,我发现如果不包括属性collectionType,它将在流程验证阶段尝试克隆支持值类,在我的例子中是PersistentSet。当然,添加任何值都会导致LazyInitializationException 我的问题是,您是否认为这是流程验证阶段的合理行为Jsf 在流程验证时选择ManyCheckBox LazyInitializationException,jsf,mojarra,Jsf,Mojarra,如果您使用由hibernate代理的集合支持的selectManyCheckbox,您将遇到可怕的LazyInitializationException问题。这与支持bean的状态无关 在调试Mojarra 2.1之后,我发现如果不包括属性collectionType,它将在流程验证阶段尝试克隆支持值类,在我的例子中是PersistentSet。当然,添加任何值都会导致LazyInitializationException 我的问题是,您是否认为这是流程验证阶段的合理行为 克隆collectio
克隆collection类的更好算法是查看接口并从java.util实例化一个已知类。感谢您提示为h:selectMany标记使用collectionType属性以防止LazyInitializationException 然而,与其在一个不合适的论坛上谈论这个问题,不如学习一下JSF2.0中的新功能,并发布一个关于这个问题的完整示例以及如何解决它 基础工作:
- Mojarra2.1是JSF2参考实现(请参阅)
- 文档描述了如何使用collectionType属性(JSF2.0中新增)
- 此问题会影响h:selectManyCheckbox、h:SelectManyList Box和h:selectManyMenu标记的验证
这正是重点!它与会话状态无关。。。 我遇到了这个问题,通过在我的组件中添加以下内容(在我的示例中是selectManyMenu),我能够解决这个问题:
;
<h:selectManyListbox value="${technologyService.entity.associatedLabs}"
collectionType="java.util.ArrayList">
<f:validator validatorId="selectManyListboxValidator" />
<f:attribute name="maxItems" value="5" />
<f:selectItems value="${metadataService.activeLabSelectItems}" />
</h:selectManyListbox>
<f:attribute name="collectionType" value="java.util.ArrayList" />;