3

我正在遍历“RSVP”对象的集合,并像这样打印出每个人的“名称”属性的值

<p:dataTable id="rsvpDataTable" var="rsvp" value="#{eventController.event.rsvps}"...
   <h:outputText value="#{rsvp.name}" />
</p:dataTable>

但我得到了错误:类'org.hibernate.collection.internal.PersistentSet'没有属性'name'

相反,如果我打印出 'rsvp.class.name' 以查看它是什么类型,它确实是一个 PersistentSet。

但为什么?它应该是集合中的单个 RSVP 实例。

如果我调试代码并在 getRsvps() 处停止,我可以看到它正在返回一个包含我的 RSVP 对象的 PersistentSet。RSVP 与 Event 具有双向关系。会不会造成这种情况?

实际上,我对它是否也是 PersistentSet 有点怀疑,我原以为它现在会被转换回普通的“Java”集,但也许不是。

谢谢

4

1 回答 1

9

您不能遍历 a Set,这是目前 JSF 的限制。JSF 2.2 将能够做到这一点。

也就是说,您可以自己转换它,或者我会做的,您可以使用OmniFaces #{of:setToList}EL 函数。您不必重新发明轮子。:)

另请参阅BalusC 的这个答案


至于 Hibernate 返回 a 的事实PersistentSet,这就是它的工作方式。Hibernate 有自己的实现Set,所以它可以实现延迟加载等特性。

于 2012-10-28T14:39:18.363 回答