Vaadin 12 ItemLabelГенератор ComboBox при использовании в сетке ComponentRenderer - PullRequest
0 голосов
/ 07 декабря 2018

Сегодня я обновился с 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();
КогдаЯ нажимаю на ComboBox, чтобы показать все опции, метки верны!но как только я выберу одну, она превратится в вышеупомянутую неправильную строку.

Важная деталь : по причинам тестирования я сейчас добавил аналогичный ComboBox с той же настройкой в ​​простой VerticalLayout (Ака нет в сетке), а там все отлично работает.Вот почему я думаю, что проблема как-то связана с ComponentRenderer, а не с одним ComboBox.

Это ошибка, или я что-то пропустил при обновлении до 12.0.0?

В блоге vaadin о новом выпуске Vaadin 12 я вижу, что есть одно известное критическое изменение, и оно связано с ComboBox:

Если выисходят из Vaadin 10 или 11, вы должны обновить зависимость платформы в файле сборки вашего проекта.Единственное серьезное изменение, которое мы внесли, было то, что ComboBox теперь поддерживает отложенную загрузку на стороне сервера.Если вы используете фильтрацию с помощью ComboBox, обратитесь к инструкциям по устранению возможной проблемы компиляции.

Однако в моем случае фильтрация не включена.

1 Ответ

0 голосов
/ 13 декабря 2018

Этот ответ был написан Диего Санзом Виллафруэлом на форуме Ваадинов , где я тоже затронул эту проблему.

Я создал пример, подобныйи я обнаружил, что порядок, в котором вы устанавливаете значение и ItemLabelGenerator, имеет значение.

Вы должны поставить comboBox.setValue после установки comboBox.setItemLabelGenerator.

В противном случае метод String.valueOf (obj) будет вызван в первый раз, давая вам представление объекта (MyObject @ 41d8d522), а не имя.

...