Je sais que cela ressemble à beaucoup de texte, mais je pense que c'est un concept assez simple qui me manque. Je suis en train d'écrire une application web avec FACELETS. J'ai une balise personnalisée rq: request-list qui prend une liste de requêtes en paramètre et affiche une belle table pour les afficher. Jusqu'ici tout va bien.Pourquoi ma variable de boucle Facelets n'est-elle pas hors de portée?
DÉCLARER: demande-liste commence comme on peut s'y attendre:
<!-- ... -->
<ice:dataTable value="#{list}" var="req">
<ice:column>
<f:facet name="header">Date last edited</f:facet>
<ice:outputText value="#{req.dateModified}" />
</ice:column>
<!-- ... -->
Et qui se révèle très bien. Il a même un lien dans la table pour éditer la requête. Hourra!
<ice:column rendered="#{spokespersonView}">
<f:facet name="header">Edit</f:facet>
<h:commandLink value="Edit" action="edit_r" rendered="#{RequestSessionBean.mutable}">
<f:setPropertyActionListener target="#{RequestSessionBean.request}" value="#{req}"/>
</h:commandLink>
</ice:column>
Cela nous amène à la page d'édition, après avoir réglé la demande dans le backing bean à celui représenté par la ligne du tableau que nous sommes. C'est là que le problème est à. Et c'est subtil.
rq: request-list est utilisé plusieurs fois dans une page; en tant que tel:
<ui:repeat value="#{ExperimentListBean.usersExperiments}" var="exp">
<rq:request-list list="#{RequestListBean.requestsByExperiment[exp]}" showExperiment="false" spokespersonView="true" />
</ui:repeat>
Maintenant, les tables apparaissent OK; c'est-à-dire que tout le texte est juste. Cependant, les commandLinks pointent vers les mauvaises requêtes ... ils pointent vers la requête de la ligne correspondante de la dernière rq: request-list sur la page. Les données relatives aux requêtes sont sorties comme elles devraient l'être dans la table, mais {req} pointe vers la mauvaise requête quand il s'agit de cliquer sur un lien de commande.
Je le répète, si j'ai quelques DÉCLARER: demande listes sur une page, le lien Modifier pour la première rangée de tous rq: les points demande-liste à la première demande (ligne) dans la dernière DÉCLARER: request-list sur la page. Le lien Modifier pour la deuxième ligne de chaque rq: liste-de-requête pointe vers la deuxième requête (ligne) de la dernière liste de requêtes rq: sur la page. Et puis
Comment puis-je obtenir {req} pour pointer vers ce que j'étais et ne pas être simplement un index dans une liste qui est obsolète?
Merci!
Cela a fonctionné! Je vous remercie! Je suis encore jeune à la programmation Web Java; Je pensais que c: forEach était exécuté une seule fois et que ui: repeat était exécuté à chaque fois. Mais encore une fois, cette page ne revient pas à elle-même, donc je ne vois pas pourquoi cela aurait de l'importance. En tout cas, ça marche, alors merci! – Nick