gpt4 book ai didi

java - 如何在 Vaadin 8 中添加网格过滤器?

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:52 27 4
gpt4 key购买 nike

Vaadin 8 刚刚问世。在 Grid 中添加过滤器从来没有出现在他们的文档中,我只在 stackoverflow 中找到了一个可行的解决方案 here

  HeaderCell cell = filterRow.getCell(pid);
// Have an input field to use for filter
TextField filterField = new TextField();
filterField.setColumns(0);
filterField.setHeight("23");



// Update filter When the filter input is changed
filterField.addTextChangeListener(change -> {
// Can't modify filters so need to replace
b.removeContainerFilters(pid);

// (Re)create the filter if necessary
if (! change.getText().isEmpty())
b.addContainerFilter(
new SimpleStringFilter(pid,
change.getText(), true, false));
});
cell.setComponent(filterField);

但现在自更新以来,此解决方案不再有效,因为 SimpleStringFilter 在新网格中不再可用,并且 BeanItemContainer 不再被识别,只允许 setItems() 填充网格数据。

谁能帮我更新 Vaadin 8 的代码?

最佳答案

可以为 Vaadin 8 Grid 添加过滤。

假设我们将Person 模型定义为:

final class Person {

private String name;

public Person(String name) {
this.name = name;
}

public String getName() {
return name;
}

}

我们的 Grid 实现看起来像这样:

final class PersonGrid extends Grid<Person> {

public PersonGrid() {
List<Person> persons = new ArrayList<>();
persons.add(new Person("foo"));
persons.add(new Person("bar"));
persons.add(new Person("foobar"));

addColumn(Person::getName).setCaption("Name");

setItems(persons);
}

}

现在,我们可以创建一个带有 TextField 的布局,它将成为我们的过滤器:

final class FilteredGridLayout extends VerticalLayout {

private final PersonGrid personGrid;
private final TextField nameFilter;

public FilteredGridLayout() {
nameFilter = new TextField();
nameFilter.setPlaceholder("Name...");
nameFilter.addValueChangeListener(this::onNameFilterTextChange);
addComponent(nameFilter);

personGrid = new PersonGrid();
addComponentsAndExpand(personGrid);
}

private void onNameFilterTextChange(HasValue.ValueChangeEvent<String> event) {
ListDataProvider<Person> dataProvider = (ListDataProvider<Person>) personGrid.getDataProvider();
dataProvider.setFilter(Person::getName, s -> caseInsensitiveContains(s, event.getValue()));
}

private Boolean caseInsensitiveContains(String where, String what) {
return where.toLowerCase().contains(what.toLowerCase());
}

}

结果如下图: Filtering using Vaadin 8 Grid

空输入结果为:foobarfoobar

foo 结果是:foofoobar。

bar 结果是:bar 和 foobar

foobar 结果是:foobar

关于java - 如何在 Vaadin 8 中添加网格过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42475774/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com