vaadin 12 中是否有可能具有组合框以显示用户友好的值但在幕后存储隐藏代码?我从 5 年前发现了这个例子,但它不适用于 Vaadin 12 组合框:https ://vaadin.com/forum/thread/7821327/combo-box-hidden-values
(如果有一个好的,相当干净的方法,请指出正确的方向!我认为这是一个常见的抢手功能)
vaadin 12 中是否有可能具有组合框以显示用户友好的值但在幕后存储隐藏代码?我从 5 年前发现了这个例子,但它不适用于 Vaadin 12 组合框:https ://vaadin.com/forum/thread/7821327/combo-box-hidden-values
(如果有一个好的,相当干净的方法,请指出正确的方向!我认为这是一个常见的抢手功能)
项目被分配给ComboBox
直接使用setItems
或间接通过setDataProvider
。
项目本身不会发送到浏览器并显示在下拉列表中。相反,为每个项目ComboBox
生成一个显示在 UI 中的字符串标签和一个在服务器上用于在用户进行选择时映射回原始项目实例的内部 id。
生成的 id 是内部的ComboBox
,没有外部含义。特别是,它不基于项目本身的任何值,例如项目在应用程序数据库中的主键。
默认情况下,标签基于对toString()
每个项目进行的操作。您可以通过分配项目标签生成器回调来自定义标签的创建方式,该回调接收项目实例并返回用于该项目的标签字符串。
例如,如果您有一个用于选择人员的组合框,那么您可以通过以下方式对其进行配置:
ComboBox<Person> personSelector = new ComboBox<>();
personSelector.setItems(allPersons);
personSelector.setItemLabelGenerator(person ->
person.getFirstName() + " " + person.getLastName());
如果我理解正确,ComboBox 中有内置功能,该方法称为setItemLabelGenerator(..),它允许定义例如返回字符串的 lambda 表达式,该字符串用于 ComboBox 项而不是来自基础数据的属性目的。
您找到的链接论坛讨论与我们上一代框架中的类似内容有关,此处对 API 进行了一些重命名。