带有隐藏键的组合框
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());
是否可以在 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());