2009-03-06 6 views
1

À l'intérieur d'un foreach imbriqué, l'accès à la même variable renvoie des valeurs différentes. Cela se produit lorsque la page est rechargée, pas au premier chargement.JSF JSTL problème avec forEach imbriqué

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    (...) 
    xmlns:c="http://java.sun.com/jstl/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 

    (...) 

    <c:forEach items="#{controller.availableTransitions}" var="transition"> 
    <c:forEach items="#{transition.availableTransitions}" var="transitionItem"> 
     <h:outputText value="1_#{transitionItem.name} 2_#{transitionItem.name}" /> 
     3_#{transitionItem.name} 4_#{transitionItem.name} 
    </c:forEach> 
    </c:forEach> 
</ui:composition> 

Après rechargement de la page, transitionItem.Name renvoie la valeur correcte pour 3 et 4, et des valeurs différentes pour 1 et 2. Peut-être un problème d'intégration JSF-JSTL?

+1

En général, imbriquées forEach boucles dans un Jsp/JSF me dit que le contrôleur ou l'objet résultant ne tire pas assez de poids de son propre - vous pouvez envisager refactorisation donc qu'une seule boucle foreach est nécessaire . – MetroidFan2002

+0

C'est en effet une solution de travail. (Seulement remarqué votre commentaire en ce moment, toujours en train de s'habituer au site Web!) – noup

Répondre

0

trouvé une solution de contournement, en se débarrassant de la boucle foreach intérieure, revenant ainsi un liste linéaire du contrôleur.

3

Je vois que vous utilisez Facelets.

Peut-être que vous pouvez essayer de remplacer votre <c:forEach> par <ui:repeat> ...

Le code deviendra alors:

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    (...) 
    xmlns:c="http://java.sun.com/jstl/core" 
    xmlns:h="http://java.sun.com/jsf/html"> 

    (...) 

    <ui:repeat value="#{controller.availableTransitions}" var="transition"> 
    <ui:repeat value="#{transition.availableTransitions}" var="transitionItem"> 
     <h:outputText value="1_#{transitionItem.name} 2_#{transitionItem.name}" /> 
     3_#{transitionItem.name} 4_#{transitionItem.name} 
    </ui:repeat> 
    </ui:repeat> 
</ui:composition> 
+0

J'ai essayé, mais le résultat est le même. – noup