如何设置Vaadin 8 TextField没有getElement方法的属性?



我正在编写一个过滤器,用于过滤显示在与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

最新更新