gig*_*igz 15 java vaadin vaadin8
瓦丁8刚刚出来.在网格过滤器的文档中添加从来没有,我只找到一个可行的解决方案在这里的计算器.
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);
Run Code Online (Sandbox Code Playgroud)
但是现在自更新以来,此解决方案不再有效,因为SimpleStringFilter在新网格中不再可用,并且BeanItemContainer不再被识别,只允许setItems()填充网格数据.
任何人都可以帮我更新Vaadin 8的代码吗?
Pat*_*zyk 13
可以为Vaadin 8 Grid添加过滤功能.
假设我们已将Person模型定义为:
final class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
我们的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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我们可以使用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());
}
}
Run Code Online (Sandbox Code Playgroud)
对于空输入结果是:foo,bar和foobar.
对于foo,结果是:foo和foo bar.
对于酒吧结果是:酒吧和foo 酒吧.
对于foobar结果是:foobar.
有Vaadin网格插件,稍后将被移植到Vaadin 8,所以如果你有时间等待它,你可以在漂亮的包中获得过滤器行.
https://vaadin.com/directory#!addon/gridutil
请在此阅读GridUtil作者的努力估算.
https://github.com/melistik/vaadin-grid-util/issues/37#issuecomment-282756130
| 归档时间: |
|
| 查看次数: |
12392 次 |
| 最近记录: |