当前位置: 首页 > 知识库问答 >
问题:

PrimeFaces数据表排序不工作

翟俊名
2023-03-14
<!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类型,因此问题的一个方面是String字段忽略了sortby=“#{Car.xxx}”标记。)
  2. 年份列实际上是不可排序的。点击年份标题的向上/向下箭头没有效果。当点击Year标头时,确实会发生服务器回调,但表没有排序。我跟踪了服务器回调过程中发生的一个ELException,其中代码无法处理表达式“#{car.0}”。“0”无疑应该是“year”,而失败的表达式无疑就是为什么没有发生排序的原因。

如果您能弄清楚为什么这个尝试使用PrimeFaces sortable dataTable的非常简单的示例(几乎是逐字复制自ShowCase源代码)会给我带来痛苦,请提供任何帮助。

共有1个答案

咸高谊
2023-03-14

你的第一个字符串是

<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;
    }
}
 类似资料:
  • 我开始在我的项目中使用primefaces,我马上就遇到了问题。我有一个列表,其中包含一些我用实体管理器从数据库中获取的东西,我在primefaces数据表的视图中显示了它。在我的后台bean中,我有:List getList(),在这里我使用实体管理器从数据库中检索记录,并立即返回。。 和myService: 我的豆子: 视图: 这种方式primefaces排序不起作用,我在堆栈上的某个地方读到

  • 我使用的是PrimeFaces 2.2和JSF 2.0.3。 我有一个包含以下数据表的xhtml视图: ..具有以下背衬豆: 注意母亲姓名列上的“commandLink”和出生日期列上的“sortBy”。 我遇到了一个奇怪的问题,似乎仅限于IE,如果我按DOB对数据进行排序,然后分页到最后一页并单击表中最后一条记录的commandLink,它会触发两个action事件。第一个事件正确地报告了我单击

  • 我有一个p:dataTable,它存储已处理表单的结果,我执行以下操作: 填充表单值。 提交。 已填充数据表--对任何列进行筛选。 更改表单值。 提交。 使用新结果填充数据表。 对任意列排序--将显示来自#3的筛选结果。 我有一个用于筛选值的arraylist,但我没有在bean中对它做任何操作。提交时,我调用actionListener,该actionListener将dataTable强制转换

  • 我想将排序添加到PrimeFaces 3.3数据表并创建了以下ViewScoped bean,它存储列表,因此不会一直从EJB中获取: 这是使用bean的视图: 问题是,我可以单击列标题进行排序,但表仍然未排序,即使初始排序不起作用。当您在getList()方法中设置断点时,我可以看到在处理请求期间多次从EJB中提取列表。只要视图在ViewScope中处于活动状态,不应该存储bean吗?

  • 我用的是Primefaces 5.2。 到目前为止,排序工作还不错,但如果我对其中一个表(我们称之为表a)进行排序,然后刷新页面(例如,通过激发h:commandButton),则会出现奇怪的行为,最后会出现NullPointerException。在这种情况下,所有表都有与表a相同的列高亮显示。此外,当我随后对表a以外的表进行排序时,就会出现以下异常:

  • 我正在使用primeface 5.1。我试图简单地将数据导出为pdf格式。要使用primeface 5.1的数据导出器,需要添加itext2.1.7依赖项。我的项目是一个基于maven的项目。我添加了依赖项: 代码的相关部分是: datatable工作正常。我认为代码不是问题所在。无论如何,这是我从glassfish 4.1控制台得到的错误: 任何帮助都将是伟大的!