gpt4 book ai didi

在网格 ComponentRenderer 中使用时 ComboBox 的 Vaadin 12 ItemLabelGenerator

转载 作者:行者123 更新时间:2023-12-01 14:00:51 24 4
gpt4 key购买 nike

今天我已经从 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 ,我看到有一个已知的重大变化,它与组合框有关:

If you are coming from Vaadin 10 or 11, you should update the platform dependency in your project build file. The only breaking change we introduced was because ComboBox now supports server-side lazy-loading. If you are using filtering with a ComboBox see instructions on fixing the possible compilation issue.

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

最佳答案

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

I created an example similar to yours and I discover that the order in which you set the value and the ItemLabelGenerator matters.

You should put comboBox.setValue after setting the comboBox.setItemLabelGenerator.

Otherwise the method String.valueOf(obj) will be called the first time, giving you the object's representation (MyObject@41d8d522) and not the name.

关于在网格 ComponentRenderer 中使用时 ComboBox 的 Vaadin 12 ItemLabelGenerator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53668416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com