2009-05-06 5 views
0

Jetons un coup d'oeil à cette structure de haricot par exemple:Manipulation d'un Bean arbre complexe JSF

public class Abean { 
    private Bbean b; 
} 

public class Bbean { 
    private ArrayList<Cbean> c; 
} 

public class Cbean { 
    private ArrayList<Dbean> d; 
} 

public class Dbean { 
    .... 
} 

tout Abean donc en gros de containts. Maintenant, je veux faire des JSP pour tous ces haricots, où par exemple, l'utilisateur peut dire combien de Cbean il veut en Bbean. Donc, mon problème est que je veux afficher un formulaire pour toutes les instances "enfant" automatiquement, par exemple: sur d.jsp Je veux montrer un formulaire pour chaque Dbean à l'intérieur du Cbeans.

J'ai essayé d'incorporer <h:dataTable> -s, sans succès. Toute aide ou pensée sera appréciée. J'espère que mon explication était claire.

Merci à l'avance, Daniel

Répondre

1

Je suppose que puisque vous utilisez JSP que vous n'utilisez pas Facelets?

Si vous y étiez, vous pouvez en tirer parti et créer manuellement une table avec des tables imbriquées.

par ex.

<table> 
<ui:repeat value="#{myCBEan.d}" var="myDBean"> 
    <tr> 
     <td><h:outputText value="#{myDBean.someText}"/></td> 
    </tr> 
</ui:repeat> 
</table> 

Alternativement, RichFaces a un a4j: répéter qui fait la même chose et peut sans doute être utilisé avec JSPs. Richfaces a également un riche: sous-table qui peut être utilisé pour imbriquer des tables.

+0

Merci, je vais essayer cela. –

+0

Depuis qu'il est apparu que j'aurais besoin de cette solution dans mon projet plus tard, je l'ai étiqueté comme la bonne réponse. Merci pour les autres réponses aussi! –

0

Je ne suis pas sûr que cela répond à votre problème, mais par exemple dans votre cBean, si vous avez le getter pour la liste « d », vous pouvez utiliser JSTL pour itérer le DBean dans votre CBean.

<c:forEach items="#{myCBean.d}" var="myDBean"> 
    <h:form> 
     <!-- example form content --> 
     <h:outputText value="#{myDBean.someText}"/> 
     <h:inputText value="#{myDBean.exampleInput}"/> 
     <h:commandButton value="#{myDBean.anAction}"/> 
    </h:form> 
</c:forEach> 
+0

Je ne pense pas que ça va marcher. Les balises JSTL n'honoreront pas le cycle de vie JSF. Même si elle dessine correctement, il en résultera des identifiants/noms d'entrée en double sur le rendu et des résultats étranges pendant la phase d'application des valeurs de demande sur le formulaire. – McDowell

+0

En effet. Cela semble fonctionner dans un environnement de facettes, mais ici, dans JSP, cela causera des problèmes. Merci d'avoir signalé cela. –

1

L'imbrication des données n'est généralement pas une bonne idée. Avec des structures de données aussi profondes, vous pouvez vous retrouver avec une itération O (n^4) sur les contrôles enfants, ce qui peut avoir des conséquences sur les performances. Le contrôle dataTable standard est assez primitif. Une meilleure approche consisterait à utiliser une forme de conception master/detail ou à écrire un contrôle d'arborescence personnalisé. Puisque l'écriture d'un contrôle personnalisé nécessite une compréhension détaillée de l'architecture JSF, vous pouvez d'abord consulter les bibliothèques JSF tierces pour voir si vous pouvez en trouver une qui répond à vos besoins.

Questions connexes