我无法使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时,数据表会显示,但只显示一列可用于排序(即 Headers 中有向上/向下箭头图标) .
dataTable有两个问题:
-
只有一列(Year)显示为可用于排序 . (Year是Car类中"int"类型的属性,而其他三列是String类型,因此问题的一个方面是String字段将忽略sortBy = "#"标记 . )
-
实际上,Year列不可排序 . 单击Year Headers 的向上/向下箭头无效 . 单击Year标头时会发生服务器回调,但表未进行排序 . 我已经跟踪了在服务器回调期间发生的ELException,其中代码无法处理表达式"#" . 毫无疑问,_2596206应该是"year",失败的表达无疑是为什么没有进行排序 .
任何帮助都将被理解为什么这个非常简单的例子(几乎从ShowCase源中逐字复制)尝试使用PrimeFaces可排序的dataTable给我带来了悲伤 .
2 回答
像这样删除磅和花括号:
由此:
对此
我遇到了同样的问题而且仅仅是因为这个原因 .
你的第一个字符串是
所以tableBean有一个方法
但是你的bean没有变量来排序后保存方法结果 .
解: