2010-06-30 21 views
0

Je souhaiterais effectuer des itérations imbriquées sur une série d'options et afficher les résultats à l'aide de JSF. À titre d'exemple, pensez à un forum de discussion. Chaque commentaire peut contenir un commentaire parent et des commentaires enfant 0-n. Donc, mon objet racine serait quelque chose comme ceci:JSF/Seam - itération imbriquée/récursive

public class MyObject { 

... 

public List<Comment> getComments(); 

... 
} 

Et mes commentaires ressemblerait à ceci:

public class Comment { 

... 

public Comment getParent(); 

... 

public List<Comment> getChildComments(); 

... 
} 

J'ai toutes mes entités configuration à l'aide JPA et ils sont renseignés dans le base de données. Mais, mon dilema est, comment puis-je itérer sur chaque commentaire afin que je puisse afficher ses commentaires d'enfant en ligne? Je sais que je peux utiliser <ui:repeat value="#{myObj}" var="comment" /> pour parcourir les commentaires au niveau de la racine d'un objet. Mais, comment puis-je itérer sur les commentaires des enfants pour chacun d'eux? Et puis, comment puis-je itérer sur leurs commentaires enfants. Ainsi de suite.

Est-ce que quelqu'un a déjà fait quelque chose comme ça? Je suppose que "itération imbriquée" pourrait vraiment être considérée comme une "itération récursive". Pensées?

Répondre

1

Pour itérations imbriquées de taille fixe, utilisez simplement:

<ui:repeat value="#{myObj}" var="comment"> 
    <ui:repeat value="#{comment}" var="subComment"> 
     <ui:repeat value="#{subComment}" var="subSubComment"> 
     </ui:repeat> 
    </ui:repeat> 
</ui:repeat> 

Si vous voulez récursion complète, récupérer les données dans une structure d'arbre dans votre haricot, en utilisant tout ce que vous boucles aimez et l'utiliser seulement pour la visualisation , dans une itération simple. Vous devrez peut-être avoir une propriété "level" des objets que vous avez placés dans votre Tree.