如何对 PrimeFaces 数据表列进行自定义排序

Ssv*_*Ssv 1 primefaces primefaces-datatable

我正在尝试在 PrimeFaces 数据表上实现排序功能。我创建了一个模型对象列表。表的排序顺序存在问题。排序列包含整数和字符串值。当我应用默认排序机制(例如列表)时sort=#{var.id},列表是基于 ASCII 顺序进行排序的。下图是排序结果的图片。我目前使用的是 PrimeFaces v5.2.5

<p:column headerText="Code Type" sortBy="#{var.codeType}">
    <h:outputText value="#{var.codeType}"/>
</p:column>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

任何人都可以指导我如何克服这个问题。

Jas*_*ies 6

这里有两个选项:

  1. 使用sortFunction在您的p:column
  2. 使用实现的类型Comparable

sortFunction

创建一个函数,它接受两个对象并以比较的方式比较它们:

public int sortByModel(Object o1, Object o2) {
    //return -1, 0 or 1 if o1 is less than, equal to or greater than o2
}
Run Code Online (Sandbox Code Playgroud)

并在您的专栏中使用它:

<p:column sortBy="#{var.codeType}" sortFunction="#{yourBean.sortByModel}">
Run Code Online (Sandbox Code Playgroud)

比较型

为您的列使用自定义类型并确保它实现Comparable<YourCustomType>. 这迫使您实现compareTo(YourCustomType o)可用于以您喜欢的任何方式排序的方法。

也可以看看:

  • 未设置排序功能时排序:https://github.com/primefaces/primefaces/blob/87bb7b52060be59497dc166531f9f435b07d8879/src/main/java/org/primefaces/model/BeanPropertyComparator.java#L71 (2认同)