如何在jsf中显示多对多jpa集合?

oss*_*sse 2 java jsf jpa

我在用户和组表之间制作了多对多连接表。所以我在每个实体中都有一个集合(用户和组)

@ManyToMany(mappedBy = "usersCollection")
    private Collection<Groups> groupsCollection;
Run Code Online (Sandbox Code Playgroud)

我想在 Jsf 中显示组集合,这就是我所做的:

<p:dataTable var="user" value="#{usergestion.tableusers}">  
                           <p:column headerText="username">  
                               <h:outputText value="#{user.username}" />  
                           </p:column>  

                           <p:column headerText="nom">  
                               <h:outputText value="#{user.nom}" />  
                           </p:column>  

                           <p:column headerText="prenom">  
                               <h:outputText value="#{user.prenom}" />  
                           </p:column>

                            <p:column headerText="groupe"> 

                                <h:outputText value="#{user.groupsCollection.get(0)}"  />

                           </p:column>
Run Code Online (Sandbox Code Playgroud)

这就是我得到的: 在此处输入图片说明

我怎样才能得到 nombre 而不是 com.database.Groups[ idGroups=2 ] ???

解决方案 :

我用了 : <h:outputText value="#{user.groupsCollection.get(0).groupname}" />

Bal*_*usC 5

您通常使用诸如<ui:repeat>或 之类的迭代组件<h:dataTable>来迭代集合。您可以将它完美地嵌套在另一个迭代组件中。

例如

<p:column headerText="groupe"> 
    <ui:repeat value="#{user.groupsCollection}" var="groups">
        <h:outputText value="#{groups.groupname}" /><br/>
    </ui:repeat>
</p:column>
Run Code Online (Sandbox Code Playgroud)

具体问题无关,你有一些糟糕的命名约定。一个组应该由一个名为 的类来表示Group,而不是Groups. 我建议重命名一个和另一个,以便代码变得更加自我记录:

<p:column headerText="groups"> 
    <ui:repeat value="#{user.groups}" var="group">
        <h:outputText value="#{group.name}" /><br/>
    </ui:repeat>
</p:column>
Run Code Online (Sandbox Code Playgroud)

s字段/变量名称中的复数应该已经表明它涉及一个集合。