java - p :dataList cannot iterate java. util.Set

标签 java hibernate jsf primefaces

我在 primefaces dataGrid 中有一个 primefaces dataList,但我在映射到嵌套 dataList 集合 (java.util.Set) 的属性时遇到了问题。当我引用嵌套集 (dream.tag) 上的任何属性时,出现异常:

javax.servlet.ServletException: /registered/modify.xhtml @42,48 value="#{tag.id}": Property 'id' not found on type org.hibernate.collection.PersistentSet.

那个属性在那里,但是 dream.tag 属性被映射到一个私有(private)的 Set 标签。是否可以将 dataList 组件与 Set 一起使用。我在下面复制了我的数据模型的大纲。感谢您的帮助!

<p:dataGrid var="dream" value="#{dreamModifyBean.dreams}" columns="5"  rows="10" paginator="true" effect="true"  paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="10,15,20" paginatorPosition="bottom"> 
    <p:column>  
        <h:panelGrid columns="1" style="width:100%"> 
            <h:outputText value="#{dream.order}. #{dream.title}"/><br/>
            <p:graphicImage value="#{dream.imageThumb}" width="125" height="100"/><br/>
            <h:outputText value="#{dream.notes}"/><br/>
            <p:dataList value="#{dream.tag}" var="tag">  
                <h:outputText value="#{tag.id}"/>
            </p:dataList> 
            <h:outputText value="#{bundle['dreamModify.cost.TEXT']} #{dream.cost}"/><br/>
        </h:panelGrid>  
    </p:column>  
</p:dataGrid>

梦想 (dreamModifyBean.dreams) - 父级:

public class Dream implements Serializable{
 @OneToMany(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
 @JoinColumn(name="DREAM_ID")
 private Set<Tag> tag;

public Set<Tag> getTag() {
    return tag;
}
public void setTag(Set<Tag> tag) {
    this.tag = tag;
}
}

标签 (dream.tag) - child

public class Tag {
 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 @Basic(optional=false)
 @Column(name="ID")
 private Long id;
 @Basic(optional=false)
 @Column(name="DESCRIPTION")
 private String description;
 @ManyToOne(fetch=FetchType.EAGER)
 @JoinColumn(name="DREAM_ID")
 private Dream dream;

 public Long getId() {
    return id;
 }
 public void setId(Long id) {
    this.id = id;
 }
 public String getDescription() {
    return description;
 }
 public void setDescription(String description) {
    this.description = description;
 }
public Dream getDream() {
    return dream;
}
public void setDream(Dream dream) {
    this.dream = dream;
}
}

最佳答案

尝试使用列表。 value 属性必须是以下之一,如 here 所述:

  • bean 列表
  • 一组 bean
  • 一个 bean
  • 一个 javax.faces.model.DataModel 对象
  • java.sql.ResultSet 对象
  • 一个 javax.servlet.jsp.jSTL.sql.Result 对象
  • 一个 javax.sql.RowSet 对象

关于java - p :dataList cannot iterate java. util.Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268128/

相关文章:

java - 右连接 JPA 查询无法获得准确的输出

java - HQL order by 两个不同的字段

jsf - 如何在Tomcat上安装和使用CDI?

java - 从Consumer端创建主题

java - Hibernate多对多级联类型问题

java - 如何将 listView 包含在布局中,而布局中已经有其他 View

java - <h :CommandButton> action attribute not working in JSF 1. 2

java - 未调用 JSF 命令按钮操作

java - 读取文本文件: Error - Variable out of type FileWriter

java - 如何保证 Java/Spring 应用程序上的 WebSocket 消息顺序