代码之家  ›  专栏  ›  技术社区  ›  kscherrer

用于网格组件渲染器时,组合框的Vaadin 12 ItemLabelGenerator

  •  3
  • kscherrer  · 技术社区  · 7 年前

    今天,我已经从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();
    当我点击 组合框

    重要细节 :出于测试原因,我现在在一个简单的应用程序中添加了一个具有相同设置的类似组合框 VerticalLayout (也就是说不在网格中),在那里一切都很好。这就是为什么我认为问题在于 ComponentRenderer 组合框

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   kscherrer    7 年前

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

    您设置的值和ItemLabelGenerator很重要。

    你应该把 comboBox.setValue comboBox.setItemLabelGenerator .

    否则,将首先调用方法String.valueOf(obj) 时间,为您提供对象的表示(MyObject@41d8d522)及 不是名字。