【问题标题】:ComboBox with hidden keys带有隐藏键的组合框
【发布时间】:2019-01-31 18:09:42
【问题描述】:

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

(如果有一个好的、相当干净的方法,请指出正确的方向!我认为这是一个常见的抢手功能)

【问题讨论】:

    标签: vaadin vaadin10 vaadin-flow


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 这不仅有效,而且比我最初使用隐藏键等的想法要好,然后必须编写逻辑将这些隐藏键取消引用到原始 java 对象中……这是一个不错的功能瓦丁。
    【解决方案2】:

    如果我理解正确的话,ComboBox 中有内置功能,该方法称为setItemLabelGenerator(..),它允许定义例如lambda 表达式返回用于 ComboBox 项的字符串,而不是来自底层数据对象的属性。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2015-01-21
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 2014-06-20
      • 2023-03-27
      相关资源
      最近更新 更多