p:dataTable的动态列初始排序方式是什么?

4

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

<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:columns)如何工作?

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

<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]}",则所有列的样式都会被设置,并且排序不起作用。我认为问题出在DataTableRendererresolveDefaultSortIcon方法中,属性tableSortByExpressioncolumnSortByExpression不同。

这是一个错误吗?有什么帮助或解决方法吗?我正在使用PrimeFaces 4.0,但我也已经测试了5.1版本。

1个回答

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>

field="#{columnProperty}"中,columnProperty是什么? - Mohammad Faisal
应该使用 column.property 而不是 columnProperty - Mohammad Faisal
为什么需要 sortBy="#{false}" - Mohammad Faisal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接