我正在编写一个过滤器,用于过滤显示在与vaadin网格相关的列中的人名。我用行对象添加了一个数据提供程序,如下所示:
ListDataProvider<Row> dataProvider = new ListDataProvider<>(dataSet.getRows());
Grid.Column<Row, Object> colName = grid.addColumn(row -> row.getValue("NAME")).setCaption("NAME");
grid.setDataProvider(dataProvider);
HeaderRow filterRow = grid.appendHeaderRow();
RowFilter filterObject = new RowFilter();
dataProvider.setFilter(row -> filterObject.test(row, "NAME"));
TextField nameField = new TextField();
nameField.addValueChangeListener(event -> {
filterObject.setName(event.getValue());
dataProvider.refreshAll();
});
nameField.setValueChangeMode(ValueChangeMode.EAGER);
filterRow.getCell(colName).setComponent(nameField);
nameField.setSizeFull();
nameField.setPlaceholder("Filter");
nameField.getElement().setAttribute("focus-target", "");
行过滤器如下:
package com.example.vaadin.utils;
import org.apache.commons.lang3.StringUtils;
public class RowFilter {
String name = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean test(com.example.vaadin.views.ContactView.Row row, String columnval) {
if (name.length() > 0 && !StringUtils
.containsIgnoreCase(String.valueOf(row.getValue(columnval)),
name)) {
return false;
}
return true;
}
}
这是我的行类:
package com.example.vaadin.utils;
import org.apache.commons.lang3.StringUtils;
public class RowFilter {
String name = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean test(com.example.vaadin.views.ContactView.Row row, String columnval) {
if (name.length() > 0 && !StringUtils
.containsIgnoreCase(String.valueOf(row.getValue(columnval)),
name)) {
return false;
}
return true;
}
}
问题如下:
当我想像这样添加属性focus-target到nameField时- nameField. getelement ().setAttribute("focus-target", ");-但是com.vaadin.ui.TextField在vaadin 8中似乎没有getElement方法。我一直在寻找一个解决方法来解决这个问题,但无济于事。这就是为什么我想问这里是否有人能告诉我如果有一个。
getElement()
在Vaadin 10中添加,在Vaadin 8中不包含。在Vaadin 8中没有内置的方法来设置任意属性,因此您将不得不采用低级解决方案,例如构建一个简单的客户端扩展或使用Javascript::execute
。