質問
ネストされた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
所属していません StackOverflow