Jsf 对所有列使用ui:在datatable内部重复

Jsf 对所有列使用ui:在datatable内部重复,jsf,datatable,uirepeat,Jsf,Datatable,Uirepeat,我对h:datatable和ui:repeat有问题 我有下一个对象结构: 产品 子管道类型1 子管道类型2 子管道类型3 在datatable中,我需要显示产品信息和其中一个子产品信息,如: Name Price StartDate EndDate P1Name 25$ 01/01/13 01/07/13 P2Name 25$ 01/01/13 01/07/13

我对h:datatable和ui:repeat有问题

我有下一个对象结构:

  • 产品
    • 子管道类型1
    • 子管道类型2
    • 子管道类型3
在datatable中,我需要显示产品信息和其中一个子产品信息,如:

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>                      

名称
#{myBundle.name}
价格
#{currentsubod.price}
起始日期
#{currentsubod.startDate}
结束日期
#{currentsubod.endDate}
它工作得很好,但每次在xhtml文件中调用#currentsubod时,它都会调用bean方法,在本例中是3次。因此,如果我在方法中有一些查询,DB将执行查询3次

我意识到,使用ui:repeat在列中可以很好地工作,但不能使用ui:repeat在数据表上的每一列中放置和放置ui:repeat

像这样(不工作):


名称
#{myBundle.name}
价格
#{currentsubod.price}
起始日期
#{currentsubod.startDate}
结束日期
#{currentsubod.endDate}
你知道怎么解决吗

提前谢谢


注意。

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

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

另见:

它调用它X次,因为
ui:param
只是一个别名。每次执行
{currentsubod.Y}
时,它都会计算
{sbaBean.getsubpodofBundleFilterByCategory(myBundle.id,categoryType.internet).Y}
。在显示表(在其构造函数中、在beforePhase或在
中)之前,不能先填充对象,然后对其值进行迭代吗?
    <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>