用于网格组件渲染器时,组合框的Vaadin 12 ItemLabelGenerator
今天,我已经从Vaadin 11.0.2升级到12.0.0-一切都很顺利,除了一件事: 在我的一个网格中,我有一个渲染列来显示一个用于网格组件渲染器时,组合框的Vaadin 12 ItemLabelGenerator,vaadin,vaadin-flow,vaadin12,Vaadin,Vaadin Flow,Vaadin12,今天,我已经从Vaadin 11.0.2升级到12.0.0-一切都很顺利,除了一件事: 在我的一个网格中,我有一个渲染列来显示一个组合框,在ItemLabelGenerator中有一个奇怪的问题。我将其定义如下: grid.addColumn(new ComponentRenderer<>(gridItem -> { ComboBox<MyObject> comboBox = new ComboBox<>(); comboBox.set
组合框
,在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");
grid.addColumn(新组件渲染器(gridItem->{
ComboBox ComboBox=新建ComboBox();
setItems(myObjectsService.findAll());
setValue(gridItem.getMyObject());
comboBox.setItemLabelGenerator(MyObject::getName);//MyObject::getName返回字符串
//comboBox.addValueChangeListener省略
返回组合框;
}))
.setHeader(“MyObject”)
.setId(“myObject”);
这在Vaadin 11.0.2中运行良好,但现在项目标签显示为package.path.to.myobject。MyObject@41d8d522
而不是gridItem.getMyObject()的实际名称代码>
当我点击组合框显示所有选项时,标签是正确的!但只要我选择一个,它就会变成前面提到的错误字符串
重要细节:出于测试原因,我现在在一个简单的垂直布局中添加了一个类似的组合框,具有相同的设置
(也称为不在网格中),在那里一切都很好。这就是为什么我认为问题出在组件渲染器
上,而不仅仅是组合框
这是一个bug,还是升级到12.0.0时遗漏了什么
在中,我看到一个已知的中断更改,它与ComboBox有关:
如果您来自Vaadin 10或11,则应在项目构建文件中更新平台依赖项。我们引入的唯一突破性更改是因为ComboBox现在支持服务器端延迟加载。如果使用组合框过滤,请参阅有关修复可能的编译问题的说明
然而,我的案例中没有涉及任何过滤。这个答案是作者写的,我在那里也提出了这个确切的问题
我创建了一个类似于您的示例,我发现
您设置的值和ItemLabelGenerator很重要
您应该在设置
comboBox.setItemLabelGenerator
否则,将首先调用方法String.valueOf(obj)
时间,为您提供对象的表示(MyObject@41d8d522)及
不是名字
我创建了一个,因为这个答案只是一个bug的解决方法。