问题描述
我正在使用 Vaadin 8,但遇到了问题。
Grid<Row> grid = new Grid<>(); grid.removeAllColumns(); //Here,I add columns to the grid grid.addColumn(... grid.addColumn(… …
grid.getColumn("delete").setConverter(new StringToUrlConverter("dustbin"));
我不明白的是指示为什么我无法添加转换器的错误消息。错误信息如下:
未定义类型的 setConverter(StringToUrlConverter) 方法 >Grid.Column
那么我必须如何设置我的转换器?
这是我的转换器:
package com.example.vaadin;
import com.vaadin.data.Converter;
import com.vaadin.data.Result;
import com.vaadin.data.ValueContext;
public class StringToUrlConverter implements Converter<String,String> {
/**
*
*/
private static final long serialVersionUID = 1L;
String imagePath = "";
public StringToUrlConverter(String path) {
this.imagePath=path;
}
public String getimagePath() {
return imagePath;
}
@Override
public Result<String> convertToModel(String value,ValueContext context) {
return Result.ok(null);
}
@Override
public String convertToPresentation(String value,ValueContext context) {
if(value.equals("delete")) {
return "<span><img src='img/" + getimagePath() + ".jpg' width='20' height='20'></span>";
}
return "";
}
}
解决方法
在 Vaadin 8 中没有 setConverter 方法,它在 Vaadin 7 中。相反,在 Vaadin 8 和更新版本中,您应该使用带有值提供程序的 addColumn
方法版本。请参阅 Vaadin's Forum 中的旧讨论。
StringToUrlConverter converter = new StringToUrlConverter (path);
grid.addColumn(row -> converter.convertToPresentation(row.getDelete(),String.class,ui.getLocale())).setCaption("Delete");
但是,就您而言,您可能也不需要它。我从你的代码中看到你只是想在网格的单元格中添加删除按钮或类似的东西。
从 Vaadin 8 开始,您可以使用以下方法在 Grid 中添加组件:
grid.addComponentColumn(row -> {
Image image = new Image();
image.setSrc(path);
image.addClickListener(event -> {
// add code to remove the row
grid.getDataProvider().refreshAll();
});
return image;
}