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-timeandrender-time コンストラクトを混在させているために発生します。

build-timeが最初に発生し、そこで発生するすべてのことは、後に発生する まで存在しないものを利用することはできませんrender-time

あなたの場合、JSTLforEachはビルド時ですが、carvar は render-time によって利用可能になりますdataTable。解決策は、内側のループにレンダリング時の構造を使用することです。これの最有力候補はui:repeat.

こちらもご覧ください

于 2012-08-05T15:15:32.050 に答える