Вопрос

Внутри вложенного foreach доступ к одной и той же переменной возвращает разные значения. Это происходит при перезагрузке страницы, а не при первой загрузке.

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

После перезагрузки страницы transitionItem.Name возвращает правильное значение для 3 и 4 и различные значения для 1 и 2. Может быть, проблема интеграции JSF-JSTL?

Это было полезно?

Решение 3

Нашел обходной путь, избавившись от внутреннего цикла forEach и вернув линейный список из контроллера.

Другие советы

Я вижу, что вы используете Facelets.

Может быть, вы можете попробовать заменить <c:forEach> на <ui:repeat> ...

Код станет:

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

В общем, я стараюсь использовать интерфейс: повторяю большую часть времени. Когда у меня возникли проблемы с c: set, я обнаружил этот блог, который был очень полезен и может применяться в вашем случае.

http://www.ilikespam.com / блог / с: Еогеасп-против-Ui: повторить-в-Facelets

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top