p:dataList不能迭代java.util.Set

c12*_*c12 4 java jsf hibernate primefaces

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

javax.servlet.ServletException:/registered/modify.xhtml @ 42,48 value ="#{tag.id}":在类型org.hibernate.collection.PersistentSet上找不到属性'id'.

该属性存在,但dream.tag属性映射到私有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>
Run Code Online (Sandbox Code Playgroud)

梦(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;
}
}
Run Code Online (Sandbox Code Playgroud)

标签(dream.tag) - 孩子

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;
}
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ndy 9

尝试使用List.值属性必须是如所描述的下列之一这里:

  • 豆类列表
  • 一系列的豆子
  • 一个豆子
  • 一个javax.faces.model.DataModel对象
  • 一个java.sql.ResultSet对象
  • 一个javax.servlet.jsp.jstl.sql.Result对象
  • 一个javax.sql.RowSet对象

  • 不错的清单.但是我想强调的是,使用`ResultSet`和`RowSet`是不好的做法(视图与DB模型的紧密耦合太多,容易出现资源泄漏). (3认同)