1

在 Facelets 页面上,我遍历列表以在p:dataTable(PrimeFaces 组件)中显示数据。该列表本身包含我使用c:forEach(JSTL) 进行旅行的另一个列表。

问题是c:forEach应该处理的列表的数据没有出现。当我访问特定元素时,它运行良好,但在c:forEach.

不能使用嵌入在另一个循环中的内部循环变量吗?

这是页面的代码:

    <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:c="http://java.sun.com/jsp/jstl/core">

    <body>

        <ui:composition template="./template_utilisateur.xhtml">

            <ui:define name="content">

                <h:form prependId="false" id="form">

                    <p:growl id="growl" showDetail="true"/>

                    <p:dataTable id="carsTable" var="car" value="#{histCommController.lc}" rowKey="#{car.id}"  
                                  selectionMode="single" >

                        <f:facet name="header">
                            Expand rows to see detailed information
                        </f:facet>

                        <p:column style="width:4%">
                            <p:rowToggler/>
                        </p:column>

                        <p:column style="width:48%">
                            <f:facet name="header">
                                id
                            </f:facet>
                            <h:outputText value="#{car.id}" />
                        </p:column>

                        <p:column style="width:48%">
                            <f:facet name="header">
                                date envoi
                            </f:facet>
                            <h:outputText value="#{car.dateEnvoi}" />
                        </p:column>

                        <p:rowExpansion id="expanssion">
                            <h:panelGrid id="display" columns="2" cellpadding="4" style="width:300px;"
                                         styleClass=" ui-widget-content grid">

                                <h:outputText value="Model:" />
                            <h:outputText value="#{car.id}" />

                            <h:outputText value="Year:" />
                            <h:outputText value="#{car.etat}" />

                            <h:outputText value="Manufacturer:" />
                            <h:outputText value="#{car.dateEnvoi}" />

                            <h:outputText value="Color:" />
                            <h:outputText value="#{car.dateLivraisonRecommande}" />

                            <h:outputText value="Fichiers : " />
                            <h:outputText value="::::::::::::" />


                            <h:outputText value="Fichiers 1 : " />
                            <h:outputText value="#{car.listFichiers.get(0).nom}" />


                            <c:forEach var="jjjjj" items="#{car.listFichiers}">
                                <h:outputText value="nom fichier 1 : " />
                            <h:outputText value="#{jjjjj.nom}" />
                            </c:forEach>
                            </h:panelGrid>

                        </p:rowExpansion>
                    </p:dataTable>
                </h:form>

            </ui:define>

        </ui:composition>

    </body>
</html>
4

1 回答 1

1

出现问题是因为您正在混合所谓的build-timerender-time 构造。

build-time首先发生,并且在那里发生的一切都不能利用在 之前不存在的东西render-time,这在之后发生。

在您的情况下,JSTLforEach是构建时,而carvar 由 render-time 提供dataTable。解决方案是为内部循环使用渲染时构造。最好的候选人是ui:repeat.

也可以看看

于 2012-08-05T15:15:32.050 回答