如何在primefaces / jsf表单面板中创建foor-loop?

时间:2016-08-24 12:16:17

标签: forms jsf for-loop primefaces jstl

我有一个primefaces面板,我想为几个元素提供primefaces'p:fileUploader。在运行期间,不清楚,将有多少项。这是我的代码:

<h:form>
    <p:panel id="grid" header="">
        <h:panelGrid columns="2" cellpadding="5">

            <c:forEach items="${bean.testCurrent}"
                var="car" varStatus="i">
                <p:outputLabel value="#{car.name}: " for="image${i.index}" />
                <p:column>
                    <p:fileUpload id="image${i.index}"
                        fileUploadListener="#{bean.uploadImage}"
                        mode="advanced" dragDropSupport="true" multiple="false"
                        update="messages" sizeLimit="1000000"
                        allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                        oncomplete="disableChoosing()"/>
                    <p:growl id="growl" showDetail="true" />
                </p:column>
            </c:forEach>

        </h:panelGrid>
        <p:commandButtonaction="#{bean.save()}" value="Save" />
        <p:commandButton action="#{bean.cancel()}"  value="Cancel" />
    </p:panel>
</h:form>

所以我的第一步是用JSTL的c:forEach来尝试。这不起作用,因为JSTL在视图的构建时运行,而JSF在视图组件树的渲染时间内运行。

是否有可能在面板中实现for循环,还是有其他动态显示表单元素的可能性?

2 个答案:

答案 0 :(得分:2)

您可以使用<ui:repeat>来获取JSF facelets xmlns:ui="http://java.sun.com/jsf/facelets"

<ui:repeat value="#{bean.testCurrent}" var="car"> ... </ui:repeat>

示例:

https://www.mkyong.com/jsf2/jsf-2-repeat-tag-example/

How to use <ui:repeat> to iterate over a nested list?

答案 1 :(得分:1)

由于您使用primefaces,请查看p:repeat。这可以从5.3.5及更高版本获得。 看看他们的example