今天我已经从 Vaadin 11.0.2 升级到 12.0.0 - 一切都很顺利,除了一件事:
在我的网格中,我有一个渲染列来显示ComboBox
. 有一个奇怪的问题ItemLabelGenerator
。我将其定义如下:
grid.addColumn(new ComponentRenderer<>(gridItem -> {
ComboBox<MyObject> comboBox = new ComboBox<>();
comboBox.setItems(myObjectsService.findAll());
comboBox.setValue(gridItem.getMyObject());
comboBox.setItemLabelGenerator(MyObject::getName); // MyObject::getName returns String
// comboBox.addValueChangeListener omitted
return comboBox;
}))
.setHeader("MyObject")
.setId("myObject");
这在 Vaadin 11.0.2 中运行良好,但现在项目标签显示为package.path.to.myobject.MyObject@41d8d522
而不是实际名称gridItem.getMyObject();
当我单击ComboBox
以显示所有选项时,标签是正确的!但是一旦我选择了一个,它就会变成上述错误的字符串。
重要细节:出于测试原因,我现在将具有相同设置的类似 ComboBox 添加到一个简单的VerticalLayout
(AKA 不在网格中)中,并且一切正常。这就是为什么我认为问题出在ComponentRenderer
不知何故而不是ComboBox
单独。
这是一个错误,还是升级到 12.0.0 时我错过了什么?
在有关 Vaadin 12 新版本的 vaadin 博客文章中,我看到有一个已知的重大更改,它与 ComboBox 有关:
如果您来自 Vaadin 10 或 11,则应在项目构建文件中更新平台依赖项。我们引入的唯一重大更改是因为 ComboBox 现在支持服务器端延迟加载。如果您使用 ComboBox 进行过滤,请参阅有关修复可能的编译问题的说明。
但是,在我的案例中不涉及任何过滤。