0

我在 Primefaces 中遇到了 filterBy 和 sortBy 的奇怪行为,其中 filterBy 本身工作正常,而 sortBy 本身也工作正常。我什至可以按一列对数据表进行排序,然后进行过滤。但我无法先过滤然后再排序。

我认为核心问题是,我在值列表中使用了中间数据结构。我会试着举个例子。我有一堂课Person

public class Person {
    private String name;
    ...
}

List<Person>我的 Bean 中,排序和过滤工作正常。

现在我有一个额外的类Pet,它属于一个Person.

因此,有一个数据结构Pair<T1, T2>对这种归属进行建模(不幸的是,我无法更改这种设计)。该数据结构的实现如下所示:

public class Pair<T1, T2> {
    private T1 fst;
    private T2 snd;

    public Pair(T1 fst, T2 snd) {...}

    //Setter & Getter
    
    public Pair() {} // Must've created the default constructor,
                     // because otherwise I got an InstantiationException when filtering
}

所以最后在我的 Bean 中,我有一个List<Pair<Person, Pet>>,它显示在数据表中。

如上所述,过滤器(例如通过 person.name)工作正常。也排序(例如按名称工作正常)。唯一的问题是当第一次过滤然后按一列排序时,我得到一个 NullPointerException 用于数据表中的单个条目。

对正在发生的事情的分析表明,在过滤然后排序之后,Pair调用的默认构造函数(唯一一次;不是在单次过滤期间,不是在单次排序期间,在其他情况下都没有),似乎导致了一个空对(因为二传手也没有被调用)。

有谁知道,为什么在那里调用默认构造函数?即使在这种List<Person>情况下,过滤后排序时也不会调用 Person 的默认构造函数。

4

0 回答 0