【问题标题】:JSF JSTL problem with nested forEach嵌套 forEach 的 JSF JSTL 问题
【发布时间】:2009-03-06 14:44:51
【问题描述】:

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

【问题讨论】:

  • 一般来说,Jsp/jsf 中的嵌套 forEach 循环告诉我控制器或生成的对象自身的权重不足 - 您可能需要考虑重构,因此只需要一个 forEach 循环.
  • 这确实是一个可行的解决方案。 (现在才注意到你的评论,还在习惯这个网站!)

标签: java jsf jstl


【解决方案1】:

我看到您正在使用 Facelets。

也许您可以尝试将您的&lt;c:forEach&gt; 替换为&lt;ui:repeat&gt;...

然后代码将变为:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-05-28
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2014-12-11
        • 1970-01-01
        相关资源
        最近更新 更多