对所有列在datatable内部使用ui:repeat



我对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次。因此,如果我在方法中有一些查询,DB将执行3次查询。

我意识到,在一列内部使用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>

知道怎么解决吗?

提前谢谢。

谨致问候。

停止在getter方法中执行业务逻辑。Getter方法应该只返回已经准备好的数据。

改为在(post)构造函数或操作(listener)方法中执行业务逻辑。

另请参阅:

  • JSF为何多次调用getter

相关内容

  • 没有找到相关文章

最新更新