在vaadin 12中是否可能具有组合框,使其显示用户友好的值,但在幕后却存储了隐藏代码?我从5年前就发现了这个示例,但是它不适用于Vaadin 12组合框:https://vaadin.com/forum/thread/7821327/combo-box-hidden-values
(如果有一种很好的,相当干净的方法,请向我指出正确的方向!我认为这是常见的抢手特性)
答案 0 :(得分:3)
直接使用a = '# #DataScience'
b = 'kjndjk#jnjkd'
c = "# #DataScience #KJSBDKJ kjndjk#jnjkd #jkzcjkh# iusadhuish#"
regex = '(\s+)#(\S)'
import re
print re.sub(regex, '\\1\\2', a)
print re.sub(regex, '\\1\\2', b)
print re.sub(regex, '\\1\\2', c)
或间接通过ComboBox
将项目分配给setItems
。
该项目本身不会发送到浏览器,而是显示在下拉列表中。而是为每个项目setDataProvider
生成一个字符串标签,该字符串标签显示在UI中,并生成一个内部ID,该ID在服务器上使用,当用户做出选择时,该内部ID映射回原始项目实例。
生成的ID在ComboBox
内部,没有外部含义。特别是,它不是基于项目本身的任何值,例如应用程序数据库中项目的主键。
默认情况下,标签是基于对每一项进行ComboBox
的操作。您可以通过分配项目标签生成器回调来自定义标签的创建方式,该回调函数接收项目实例并返回要用于该项目的标签字符串。
例如,如果您有一个用于选择人员的组合框,则可以在例如这样:
toString()
答案 1 :(得分:2)
如果我对您的理解正确,那么ComboBox中有一个内置功能,该方法称为setItemLabelGenerator(..),该方法可以定义例如返回字符串的lambda表达式,该字符串用于ComboBox项,而不是基础数据对象的属性。
您找到的链接的论坛讨论与我们上一代框架中的类似内容有关,此处对API进行了一些重命名。