在迭代p:dataGrid / p:dataTable时设置托管bean属性

时间:2014-03-29 11:31:33

标签: jsf primefaces datagrid datatable jsf-2.2

我在MySQL数据库中有三个表。

  • 类别(从此问题中排除)
  • sub_category
  • 产品

这些表之间的关系是直观的 - 按照它们出现的顺序一对多。


我按照以下方式使用<p:dataGrid>遍历SubCategoryList<SubCategory>列表。

<p:dataGrid var="row" value="#{subCategoryManagedBean}" rows="2" first="0" columns="1" rowIndexVar="rowIndex" paginator="true" paginatorAlwaysVisible="false" pageLinks="10" lazy="true" rowsPerPageTemplate="5,10,15">
    <h:panelGrid columns="1" style="width:100%;">

        <!--Here set #{row.subCatId} to the associated managed bean, does not seem possible-->

        <!--<p:carousel var="prodRow" value="#{row.productSet.toArray()}" numVisible="4" pageLinks="5" headerText="#{row.subCatName}" style="text-align: left;">
            <p:graphicImage library="fileUpload" name="product_image/medium/#{prodRow.productImageSet.toArray()[0].prodImage}"/>
        </p:carousel>-->

    </h:panelGrid>
    <p:ajax event="page" onstart="PF('blockDataPanelUIWidget').block()" oncomplete="PF('blockDataPanelUIWidget').unblock()"/>
</p:dataGrid>

在迭代List<SubCategory>时,我想将每个子类别的id subCatId(类型为Long)设置为相关的托管bean,以便可以在<p:carousel>中显示产品之前获取与每个子类别关联的产品列表吗?是否可以?


其他信息:

SubCategoryList<SubCategory>的每个对象都有一组产品,Set<Product>已经被提取,它们也显示在<p:carousel>中,如XHTML中的注释代码所示在按降序排序每个子类别的产品列表后,我只需要获取每个子类别的前五个产品。

只有在迭代List<SubCategory>时查询每个子类别的产品列表时,这似乎才有可能。

如果还有其他方法,请提出建议。无论如何,我需要以表格格式显示子类别的子列表 - 子类别1 -><p:dataGrid>的第一行显示其前5个产品,子类别2 ->显示它是<p:dataGrid>第二行中的前5个产品,依此类推。

1 个答案:

答案 0 :(得分:1)

当然,你可以做到。这就是您的<p:carousel>应该是这样的:

<p:carousel var="prodRow" value="#{mrBean.getProducts(row.subCatId)}" numVisible="4"
            pageLinks="5" headerText="#{row.subCatName}" style="text-align: left;">
    <p:graphicImage library="fileUpload" name="product_image/medium/#{prodRow.productImageSet.toArray()[0].prodImage}"/>
</p:carousel>

这是@ManagedBean

@ManagedBean
@RequestScoped
public class MrBean {
    ...
    public List<Product> getProducts(Long subCatId) {
        // Fetch your top 5 products here
    }
    ...
}