2009-07-15 12 views
1

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!

Répondre

1

Jetez un coup d'œil à this blog entry, vous utiliserez probablement repeat qui est exécuté une fois, lorsque l'arbre des composants est construit, au lieu de foreach qui est évalué au moment du rendu. (Mais c'est juste un tir dans le noir, je n'ai pas essayé votre exemple)

+0

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

Questions connexes