2 votes

Comment afficher une collection jpa many to many en jsf ?

J'ai créé une table de jointure entre les tables utilisateurs et groupes. J'ai donc une collection dans chaque entité (utilisateurs et groupes).

@ManyToMany(mappedBy = "usersCollection")
    private Collection<Groups> groupsCollection;

et je veux afficher la collection de groupes dans Jsf, c'est ce que j'ai fait :

<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>

et c'est ce que je reçois : enter image description here

comment puis-je obtenir le nombre seul et non com.database.Groups[ idGroups=2 ] ? ???

Solution :

J'ai utilisé : <h:outputText value="#{user.groupsCollection.get(0).groupname}" />

5voto

BalusC Points 498232

Vous utilisez normalement un composant itératif tel que <ui:repeat> o <h:dataTable> pour itérer sur une collection. Vous pouvez parfaitement l'imbriquer dans un autre composant itératif.

Par exemple

<p:column headerText="groupe"> 
    <ui:repeat value="#{user.groupsCollection}" var="groups">
        <h:outputText value="#{groups.groupname}" /><br/>
    </ui:repeat>
</p:column>

Sans rapport au problème concret, vous avez là une mauvaise convention de dénomination. Un groupe devrait être représenté par une classe nommée Group pas Groups . Je suggère de renommer l'un et l'autre afin que le code devienne beaucoup plus auto-documenté :

<p:column headerText="groups"> 
    <ui:repeat value="#{user.groups}" var="group">
        <h:outputText value="#{group.name}" /><br/>
    </ui:repeat>
</p:column>

Le pluriel s dans le nom du champ/variable devrait déjà indiquer qu'il s'agit d'une collection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X