带有隐藏键的组合框

ComboBox with hidden keys

是否可以在 vaadin 12 中使用组合框来显示用户友好的值,但在幕后存储隐藏代码?我在 5 年前发现了这个例子,但它不适用于 Vaadin 12 组合框:https://vaadin.com/forum/thread/7821327/combo-box-hidden-values

(如果有一个好的、相当干净的方法来做到这一点,请给我指明正确的方向!我认为这是一个普遍受欢迎的功能)

如果我没理解错的话,ComboBox 中有内置功能,该方法称为 setItemLabelGenerator(..),它允许定义例如lambda 表达式 returns 用于 ComboBox 项的字符串,而不是基础数据对象中的 属性。

您找到的链接论坛讨论与我们上一代框架中的类似内容有关,API 此处已进行了一些重命名。

项目直接使用 setItems 或通过 setDataProvider 间接分配给 ComboBox

项目本身不会发送到浏览器并显示在下拉列表中。相反,对于每个项目 ComboBox 生成一个显示在 UI 中的字符串标签和一个在服务器上使用的内部 ID,用于在用户进行选择时映射回原始项目实例。

生成的 id 是 ComboBox 内部的,没有外部意义。特别是,它不基于项目本身的任何值,例如项目在应用程序数据库中的主键。

默认情况下,标签基于对每个项目执行 toString()。您可以通过分配接收项目实例的项目标签生成器回调和 returns 用于该项目的标签字符串来自定义标签的创建方式。

例如,如果您有一个用于选择人员的组合框,那么您可以在例如这样:

ComboBox<Person> personSelector = new ComboBox<>();
personSelector.setItems(allPersons);
personSelector.setItemLabelGenerator(person ->
  person.getFirstName() + " " + person.getLastName());