【问题标题】:Vaadin 12 ItemLabelGenerator of ComboBox when used in grid ComponentRendererVaadin 12 ItemLabelGenerator 的 ComboBox 在网格 ComponentRenderer 中使用时
【发布时间】:2018-12-07 11:14:41
【问题描述】:

今天我已经从 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 进行过滤,请参阅修复可能的编译问题的说明。

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

【问题讨论】:

    标签: vaadin vaadin-flow vaadin12


    【解决方案1】:

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

    我创建了一个与您类似的示例,我发现 您设置的值和 ItemLabelGenerator 很重要。

    你应该在设置后输入comboBox.setValue comboBox.setItemLabelGenerator.

    否则方法 String.valueOf(obj) 将被第一个调用 时间,给你对象的表示(MyObject@41d8d522)和 不是名字。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 2023-03-09
    • 2019-05-29
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多