PrimeFaces数据表无法使用有效过滤器进行排序

时间:2017-03-21 21:22:46

标签: jsf primefaces jsf-2

PrimeFaces版本:6.0

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

以下情景:

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

1 个答案:

答案 0 :(得分:2)

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

public class MyDataHolder implements Serializable

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