Pregunta

Dentro de un foreach anidado, acceder a la misma variable está devolviendo valores diferentes. Esto sucede cuando la página se vuelve a cargar, no en la primera carga.

<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>

Después de recargar la página, transitionItem.Name devuelve el valor correcto para 3 y 4, y diferentes valores para 1 y 2. ¿Quizás un problema de integración JSF-JSTL?

¿Fue útil?

Solución 3

Encontró una solución al deshacerse del bucle forEach interno, devolviendo así una lista lineal del controlador.

Otros consejos

Veo que está utilizando Facelets.

Tal vez pueda intentar reemplazar su <c:forEach> por <ui:repeat> ...

El código se convertirá en:

<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>

En general, trato de usar ui: repito la mayor parte del tiempo. Cuando tenía problemas con c: set, encontré este blog, que fue muy útil y puede aplicarse también en su caso.

http://www.ilikespam.com / blog / c: foreach-vs-ui: repetición en facelets

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top