使用ui:在数据表内重复所有列

时间:2013-07-04 11:39:33

标签: jsf datatable uirepeat

我遇到h:datatable和ui:repeat。

的问题

我有下一个对象结构:

  • 产品
    • SubproductType1
    • SubproductType2
    • SubproductType3

在数据表中,我需要显示产品的信息和其中一个子产品的信息,如:

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:在列内重复它可以正常工作,但你不能把它和ui:使用ui重复在它之外:重复数据表中的每一列。

喜欢这个(不工作):     

    <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>

知道如何解决这个问题吗?

提前致谢。

问候。

1 个答案:

答案 0 :(得分:2)

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

改为使用(post)构造函数或action(listener)方法中的业务逻辑。

另见: