如何使用ui:在forEach中包含并在包含的页面中使用循环变量?

时间:2011-04-26 20:21:44

标签: jsf jsf-2

我正在Tomcat 7.0.12中升级到JSF 2.0.2,并且我有一个页面,其中包含可变数量的可重用小部件。我曾经为此目的使用t:aliasBean,但它似乎不起作用。我现在正在我的Xhtml中尝试以下内容:

<c:forEach items="${viewBean.currentView.parts}" var="part">
<t:div styleClass="div#{viewBean.partNumber[part]}">
    <c:forEach items="${part.widgets}" var="widget">
        <f:subview id="div#{viewBean.widgetId[widget]}">
            <ui:include src="widgets/#{widget.widgetPage}">
                <ui:param name="widget" value="#{widget}" />
            </ui:include>
        </f:subview>
    </c:forEach>
</t:div>
</c:forEach> 

似乎发生的事情是循环中的下一个小部件在上一个小部件的页面中使用,所以除非只有一个小部件,否则我会收到错误。

编辑:我尝试过ui:重复 - 它不起作用。我也试过删除ui:include,就像一个完整性测试;循环工作正常。另外,我使用的是Spring 2.5.6.SEC01 - 尽管它无关紧要。

1 个答案:

答案 0 :(得分:1)

我建议使用ui:repeat代替c:forEach

为什么?

  

最重要的是要理解   关于Facelets中的jstl标签是   他们不代表组件   永远不会成为其中的一部分   视图一旦组件树   建成。相反,它们是标签   实际负责建设   树在第一位。一旦他们   已经完成了他们的工作,他们已经过期了   不再,不再是等等。

来源here。我真的建议阅读整篇文章。

<强>更新

请注意,我并未说c:forEach不好。我想强调将它与ui:repeat混合使用不建议使用。