質問

ネストされた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>

一般に、私はほとんどの場合ui:repeatを使用しようとします。 c:setの問題を抱えていたときに、このブログを見つけました。これは非常に役に立ち、あなたの場合にも当てはまるかもしれません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top