我无法使PrimeFaces dataTable组件的排序行为按照记录的方式工作。 (我使用的是PrimFaces 4.0,JSF 2.1.12和Tomcat 7.0。)据我所知,我看到的问题与PF dataTable相关的任何其他问题报告/讨论都不对应。为了探索这个问题,我基于使用已排序的dataTable的ShowCase示例创建了一个示例,复制了tableBean支持bean的ShowCase源代码(包括为示例生成本地汽车数据;不涉及外部数据库访问)和支持汽车类。 xhtml也是ShowCase示例的非常接近的副本:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<h:form>
<p:dataTable id="dataTable" var="car" value="#{tableBean.carsSmall}">
<f:facet name="header">
Ajax Sorting
</f:facet>
<p:column id="modelHeader" sortBy="#{car.model}">
<f:facet name="header">
<h:outputText value="Model" />
</f:facet>
<h:outputText value="#{car.model}" />
</p:column>
<p:column sortBy="#{car.year}">
<f:facet name="header">
<h:outputText value="Year" />
</f:facet>
<h:outputText value="#{car.year}" />
</p:column>
<p:column sortBy="#{car.manufacturer}">
<f:facet name="header">
<h:outputText value="Manufacturer" />
</f:facet>
<h:outputText value="#{car.manufacturer}" />
</p:column>
<p:column sortBy="#{car.color}">
<f:facet name="header">
<h:outputText value="Color" />
</f:facet>
<h:outputText value="#{car.color}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
运行xhtml时,数据表会显示,但只显示一列可供排序(即标题中有向上/向下箭头图标)。
dataTable有两个问题:
在弄清楚为什么这个非常简单的例子(几乎从ShowCase源中逐字复制)尝试使用PrimeFaces可排序的dataTable时,任何帮助都会受到赞赏。
答案 0 :(得分:4)
像这样删除磅和花括号:
由此:
<p:column sortBy="#{car.manufacturer}">
到此
<p:column sortBy="manufacturer">
我遇到了同样的问题而且仅仅是因为这个问题。
答案 1 :(得分:2)
你的第一个字符串是
<p:dataTable id="dataTable" var="car" value="#{tableBean.cars}">
所以tableBean有一个方法
public List<Car> getCars()
{
return carEJB.findAll();
}
但是你的bean在排序后没有保存方法结果的变量。
解决方案:
public class CarController
{
...
private List<Car> cars;
...
privare void reset()
{
cars = carEJB.findAll();
}
...
public List<Car> getCars()
{
return cars;
}
}
答案 2 :(得分:0)
由于lazy =“ true”的存在,我的数据表未排序。当我删除它时,它起作用了。我知道您没有使用该属性。