我对 h:datatable 和 ui:repeat 有疑问。
我有下一个对象结构:
- 产品
- 子产品类型1
- 子产品类型2
- 子产品类型 3
在数据表中,我需要显示产品信息和子产品之一的信息,例如:
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 时它都会调用 bean 方法,在这种情况下是 3 次。因此,如果我在方法中有一些查询,则数据库正在执行 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>
知道如何解决吗?
提前致谢。
问候。