嵌套forEach的JSF JSTL问题

时间:2009-03-06 14:44:51

标签: java jsf jstl

在嵌套的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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

一般来说,我尝试使用ui:大部分时间都是重复。当我有c:设置问题时,我找到了这个博客,这非常有帮助,也适用于您的情况。

http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets

答案 2 :(得分:0)

通过删除内部forEach循环找到一个变通方法,从而从控制器返回一个线性列表。