ComboBox со скрытыми ключами - PullRequest
0 голосов
/ 31 января 2019

Возможно ли в vaadin 12 иметь комбинированные списки, чтобы он отображал удобное для пользователя значение, но за кулисами он хранит скрытый код?Я нашел этот пример 5 лет назад, но он не относится к комбинированным спискам Vaadin 12: https://vaadin.com/forum/thread/7821327/combo-box-hidden-values

(Если есть хороший, достаточно чистый способ сделать это, пожалуйста, укажите мне правильное направление! Iподумал, что это распространенная функция)

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Элементы назначаются на ComboBox либо напрямую с помощью setItems, либо косвенно через setDataProvider.

Сам элемент не отправляется в браузер и отображается в раскрывающемся списке.Вместо этого для каждого элемента ComboBox генерируется строковая метка, которая отображается в пользовательском интерфейсе, и внутренний идентификатор, который используется на сервере для сопоставления с исходным экземпляром элемента, когда пользователь делает выбор.

сгенерированный идентификатор является внутренним для ComboBox и не имеет внешнего значения.В частности, оно не основано на каком-либо значении самого элемента, например на первичном ключе элемента в базе данных приложения.

Метка по умолчанию основана на выполнении toString() для каждого элемента.Вы можете настроить способ создания метки, назначив обратный вызов генератора меток элементов, который получает экземпляр элемента и возвращает строку метки для использования с этим элементом.

Если у вас, например, есть поле со списком для выбора людей, тогдавы можете настроить его, например, так:

ComboBox<Person> personSelector = new ComboBox<>();
personSelector.setItems(allPersons);
personSelector.setItemLabelGenerator(person ->
  person.getFirstName() + " " + person.getLastName());
0 голосов
/ 01 февраля 2019

Если я вас правильно понимаю, в ComboBox есть встроенная функция, которая называется setItemLabelGenerator (..) , которая позволяет определить, например, лямбда-выражение, которое возвращает String, которое используется дляЭлементы ComboBox вместо свойства из базового объекта данных.

Обсуждаемая вами дискуссия на форуме о похожей вещи в нашем предыдущем поколении фреймворка, здесь было некоторое переименование API.

...