我想按默认列对表进行排序。我在文档中找到了以下示例:
<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
方法中。属性tableSortByExpression
与columnSortByExpression
不同。
这是一个错误吗?任何帮助或解决方法?我正在使用PrimeFaces 4.0。但我也用5.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>