gpt4 book ai didi

jsf - PrimeFaces 数据表排序不起作用

转载 作者:行者123 更新时间:2023-12-03 12:10:36 26 4
gpt4 key购买 nike

我无法让 PrimeFaces dataTable 组件的排序行为按照记录工作。 (我使用的是 PrimFaces 4.0、JSF 2.1.12 和 Tomcat 7.0。)据我所知,我看到的问题与 PF 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有两个问题:

  1. 只有一列(年份)显示为可用于排序。 (Year 是 Car 类中“int”类型的属性,而其他三列是 String 类型,因此问题的一个方面是 sortBy="#{car.xxx}"标签被 String 字段忽略.)
  2. 事实上,年份列是不可排序的。单击 Year 标题的向上/向下箭头没有任何效果。单击 Year 标题时会发生服务器回调,但表格未排序。我已经追踪到在服务器回调期间发生的 ELException,其中代码无法处理表达式“#{car.0}”。毫无疑问,“0”应该是“年”,失败的表达式无疑是没有进行排序的原因。

在弄清楚为什么尝试使用 PrimeFaces 可排序数据表的这个非常简单的示例(几乎逐字复制自 ShowCase 源)让我感到悲伤时,我们将不胜感激。

最佳答案

你的第一个字符串是

<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;
}
}

关于jsf - PrimeFaces 数据表排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com