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

Found a workaround, by getting rid of the inner forEach loop, thus returning a linear list from the controller.

于 2009-03-06T18:32:42.463 に答える