JSF Problema JSTL con nidificato per ogni
Domanda
All'interno di un foraggio nidificato, l'accesso alla stessa variabile restituisce valori diversi. Ciò accade quando la pagina viene ricaricata, non al primo caricamento.
<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>
Dopo il ricaricamento della pagina, transizioneItem.Name restituisce il valore corretto per 3 e 4 e valori diversi per 1 e 2. Forse un problema di integrazione JSF-JSTL?
Soluzione 3
Trovato una soluzione alternativa, eliminando il ciclo forEach interno, restituendo così un elenco lineare dal controller.
Altri suggerimenti
Vedo che stai usando Facelets.
Forse puoi provare a sostituire il tuo <c:forEach>
con <ui:repeat>
...
Il codice diventerà quindi:
<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>
In generale, provo a usare l'interfaccia utente: ripeti la maggior parte delle volte. Quando stavo riscontrando problemi di c: set, ho trovato questo blog, che è stato molto utile e potrebbe applicarsi anche nel tuo caso.
http://www.ilikespam.com / blog / c: foreach-vs-ui: repeat-in-facelets