PrimeFaces 数据表无法使用活动过滤器进行排序

PrimeFaces datatable fails sorting with active filter

PrimeFaces 版本:6.0

在我的数据中 table 我可以对列进行排序和过滤,但不能同时进行。

以下场景:

Column1               Column2
http://someurl.com       1
http://anotherurl.com    5

当我在 Column1 过滤器中输入一个值时。只有过滤后的行可见。现在,当我点击排序 Column1 时,我得到以下结果:

Column1               Column2
                         0
                         0

Column2 映射到原始值,解释零值。

作为解决方法,我添加了:

<p:ajax event="sort" onstart="PF('mytableWidget').filter();"/>                                

但是在 filter() 函数执行之前,我仍然可以看到上面几毫秒的空结果。

<p:dataTable id="mytable" widgetVar="mytableWidget" value="#{bean.data}" var="item">
<p:column headerText="Column1" sortBy="#{item.column1}" filterBy="#{item.column1}"  filterMatchMode="contains">
    #{item.column1}
</p:column>
<p:column headerText="Column2" sortBy="#{item.column2}">
    #{item.column2}
</p:column>

bean.data 映射到 ArrayList<MyDataHolder>.

import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(of = "column1")
public class MyDataHolder {        
    String column1;
    int column2;
}

在我看来你必须使 MyDataHolder 可序列化;

public class MyDataHolder implements Serializable

我最好的阐述与 here 相同(这同样适用于 ViewScoped bean)。 ViewScoped(和范围更广的)bean 必须是可序列化的,因此它们的所有属性必须相同。