Vaadin 8网格带多个滤波器

时间:2018-01-23 12:36:10

标签: java-8 vaadin8

我想根据两个过滤标准过滤网格内容,因此我有以下

ListDataProvider<Person> dataProvider = (ListDataProvider<Person>) grid.getDataProvider();
SerializablePredicate<Person> filter = new SerializablePredicate<Person>() {
  @Override
  public boolean test(Person Person) {
    return false;
  }
};

filter.and(Person -> Person.getAge() == 30);
filter.and(Person -> Person.getName().equalsIgnoreCase("bernd"));
dataProvider.setFilter(filter);

}

然而,网格没有显示任何内容。

1 个答案:

答案 0 :(得分:2)

您的联合始终评估为false,因为它的建模方式如下:

false && Person.getAge() == 30 && Person.getName().equalsIgnoreCase("bernd")

您可以在第一个过滤器中使用返回true,也可以省略它并以Person.getAge() == 30开头。

第二个问题是你忽略了你的结合的结果。除此之外,方法andPredicate中定义,并返回不可序列化的Predicate。解决方案是使用简单的&&

SerializablePredicate<Person> filter = p -> p.getAge() == 30 &&
                                            p.getName().equalsIgnoreCase("bernd");