1

h:datatable と ui:repeat に問題があります。

私は次のオブジェクト構造を持っています:

  • 製品
    • SubproductType1
    • SubproductType2
    • SubproductType3

データテーブルでは、次のような製品の情報とサブ製品の 1 つの情報を表示する必要があります。

Name         Price       StartDate       EndDate
P1Name        25$        01/01/13        01/07/13
P2Name        25$        01/01/13        01/07/13

価格と日付は、SubproductType2 価格属性から取得されます。

だから私はこれを持っている場合

<h:dataTable value="#{bundleBean.products}" var="myBundle" >

    <ui:param name="currentSubProd" value="#sbaBean.getSubProdOfBundleFilterByCategory(myBundle.id, categoryType.internet)}" />
                    <h:column>
                    <f:facet name="header" >Name</f:facet>
                            #{myBundle.name}
                </h:column>
                    <h:column>
                    <f:facet name="header" >Price</f:facet>
                            #{currentSubProd.price}
                </h:column>
                    <h:column>
                    <f:facet name="header" >StartDate</f:facet>
                            #{currentSubProd.startDate}
                </h:column>
                    <h:column>
                    <f:facet name="header" >EndDate</f:facet>
                            #{currentSubProd.endDate}
                </h:column>
</h:dataTable>                      

これは完全に機能しますが、xhtml ファイルで #currentSubProd が呼び出されるたびに (この場合は 3 回)、Bean メソッドを呼び出します。したがって、メソッド内にクエリがある場合、DB はクエリを 3 回実行しています。

列内で ui:repeat を使用すると正常に動作しますが、データテーブルのすべての列に対して ui:repeat を使用して ui:repeat を列の外に置くことはできません。

このように(動作していません):

    <ui:repeat name="currentSubProd" value="#sbaBean.getSubProdOfBundleFilterByCategory(myBundle.id, categoryType.internet)}" >
                    <h:column>
                    <f:facet name="header" >Name</f:facet>
                            #{myBundle.name}
                </h:column>
                    <h:column>
                    <f:facet name="header" >Price</f:facet>
                            #{currentSubProd.price}
                </h:column>
                    <h:column>
                    <f:facet name="header" >StartDate</f:facet>
                            #{currentSubProd.startDate}
                </h:column>
                    <h:column>
                    <f:facet name="header" >EndDate</f:facet>
                            #{currentSubProd.endDate}
                </h:column>
    </ui:repeat>
</h:dataTable>

それを解決する方法はありますか?

前もって感謝します。

よろしく。

4

1 に答える 1