p:带有动态列的dataTable初始SortBy

时间:2014-12-18 07:36:34

标签: jsf jsf-2 primefaces

我想按默认列对表进行排序。我在文档中找到了以下示例:

<p:dataTable var="car" value="#{carBean.cars}" sortBy="model">
    <p:column sortBy="model" headerText=”Model”>
        <h:outputText value="#{car.model}" />
    </p:column>
    <p:column sortBy="year" headerText="Year">
        <h:outputText value="#{car.year}" />
    </p:column>
    ...more columns
</p:dataTable>

这适用于静态列。默认情况下,它按列'model'排序。但是,如何使用动态列(p:列)?

如果我以同样的方式实现它:

<p:dataTable id="cars" var="car" value="#{dtColumnsView.cars}"
    widgetVar="carsTable"
    filteredValue="#{dtColumnsView.filteredCars}"
    sortBy="#{car.model}">

    <p:columns value="#{dtColumnsView.columns}" var="column"
        columnIndexVar="colIndex" sortBy="#{car[column.property]}">

        <f:facet name="header">
            <h:outputText value="#{column.header}" />
        </f:facet>

        <h:outputText value="#{car[column.property]}" />
    </p:columns>
</p:dataTable>

它已正确排序,但未设置排序列标题的样式!如果我使用sortBy="#{car[column.property]}",则设置所有列的样式,并且排序不起作用。 我认为问题出在DataTableRenderer resolveDefaultSortIcon方法中。属性tableSortByExpressioncolumnSortByExpression不同。

这是一个错误吗?任何帮助或解决方法?我正在使用PrimeFaces 4.0。但我也用5.1测试了它。

1 个答案:

答案 0 :(得分:1)

我有类似的问题,并在primefaces论坛上询问

这里的答案

http://forum.primefaces.org/viewtopic.php?f=3&t=41301&p=130146#p130146

所以工作代码应该来自你的例子

<p:dataTable id="cars" var="car" value="#{dtColumnsView.cars}"
widgetVar="carsTable"
filteredValue="#{dtColumnsView.filteredCars}"
sortBy="#{false}" sortField="model">

    <p:columns value="#{dtColumnsView.columns}" var="column"  
               columnIndexVar="colIndex" sortBy="#{car[column.property]}"  
                                              field="#{column.property}">

        <f:facet name="header">
            <h:outputText value="#{column.header}" />
        </f:facet>

        <h:outputText value="#{car[column.property]}" />
    </p:columns>
</p:dataTable>