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>
それを解決する方法はありますか?
前もって感謝します。
よろしく。