如何在primefaces/jsf表单面板中创建一个for循环?

Joh*_*ohn 1 forms jsf for-loop jstl primefaces

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

您可以<ui:repeat>从 JSF facelets 中使用它xmlns:ui="http://java.sun.com/jsf/facelets"

<ui:repeat value="#{bean.testCurrent}" var="car"> ... </ui:repeat>
Run Code Online (Sandbox Code Playgroud)

例子:

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

如何使用 <ui:repeat> 迭代嵌套列表?