1

在嵌套的 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 集成问题?

4

3 回答 3

3

我看到您正在使用 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>
于 2009-03-06T15:04:50.810 回答
2

一般来说,我尝试使用 ui:repeat 大部分时间。当我遇到 c:set 问题时,我发现了这个博客,它非常有帮助,也可能适用于你的情况。

https://rogerkeays.com/jsf-c-foreach-vs-ui-repeat

于 2009-03-06T20:40:32.860 回答
0

找到了一种解决方法,摆脱了内部 forEach 循环,从而从控制器返回一个线性列表。

于 2009-03-06T18:32:42.463 回答