在网格ComponentRenderer中使用时,组合框的Vaadin 12 ItemLabelGenerator

时间:2018-12-07 11:14:41

标签: vaadin vaadin-flow vaadin12

今天我已经从Vaadin 11.0.2升级到12.0.0-一切都进行得很顺利,除了以下几点:

在我的网格中,我有一个渲染的列来显示ComboBoxItemLabelGenerator有一个奇怪的问题。我将其定义如下:

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(又称不在网格中)中,一切正常。这就是为什么我认为问题与ComponentRenderer无关,而与ComboBox无关。

这是一个错误,还是升级到12.0.0时错过了一些东西?

vaadin blog post about the new release of Vaadin 12中,我发现有一个已知的重大更改,它与ComboBox有关:

  

如果您来自Vaadin 10或11,则应在项目构建文件中更新平台依赖性。我们引入的唯一重大变化是因为ComboBox现在支持服务器端延迟加载。如果要通过ComboBox使用过滤,请参见有关解决可能的编译问题的说明。

但是,我的案件不涉及任何过滤。

1 个答案:

答案 0 :(得分:1)

这个答案是由Diego Sanz Villafruela in the Vaadin Forum撰写的,我也在这里提出了确切的问题。

  

我创建了一个与您相似的示例,并且发现订单中   您可以设置值,而ItemLabelGenerator很重要。

     

您应该在设置comboBox.setValue之后   comboBox.setItemLabelGenerator

     

否则,方法String.valueOf(obj)将被称为第一个   时间,为您提供对象的表示形式(MyObject @ 41d8d522)和   不是名字。