val logger = LoggerFactory.getLogger("UserManager")
val users = DataServices.getUsers()
var userContainer = new IndexedContainer
userContainer.addContainerProperty("name", classOf[String],None)
userContainer.addContainerProperty("user", classOf[User], None)
val userList = new ListSelect { container = userContainer }
userList.itemCaptionMode_=(AbstractSelect.ItemCaptionMode.Property)
userList.itemCaptionPropertyId_=("name")
users.foreach(u=>{
val item = userContainer.getItem(userContainer.addItem)
item.getProperty("name").value = u.name
item.getProperty("user").value = u
})
addComponent(userList)
val delButton = new Button { caption = "DeleteUser" }
delButton.enabled = false
addComponent(delButton)
userList.valueChangeListeners += (e => {
val selItem = userList.getItem(e.property.value.get).getProperty("user")
logger.info("{}",selItem)
})
最终的日志给了我正确的值,但我得到了警告:
您使用toString()而不是getValue()来获取a的值 属性类型 com.vaadin.data.util.IndexedContainer $ IndexedContainerProperty。这个 强烈建议不要使用,只提供向后兼容性 与Vaadin 6一起
。要禁用此警告消息并保留该行为,请设置init参数" legacyPropertyToString
"到" true
"。要停用旧版功能,请设置" legacyPropertyToString
"到false
。 (请注意,您的调试器可能会调用toString()
并触发此消息)。要找出谁正在调用toString()
,请启用FINE级别日志记录。
我无法弄清楚使用scaladin获取所选项目的正确方法。
使用vaadin 7.6.3
和scaladin 3.1.0
那么确定所选项目并且没有得到警告的正确方法是什么?
答案 0 :(得分:0)
获得价值的方式
val selItem = userList.getItem(e.property.value.get).getProperty("user")
是对的。问题在于隐式转换为
中的字符串logger.info("{}",selItem)
正确的方法是获取setItem.getValue()然后检查其类型,转换为字符串然后调用loger。
答案 1 :(得分:0)
结束了这个:
val selItem = userList.getItem(e.property.value.get).getProperty("user").value.get.asInstanceOf[User]
logger.info("{}", selItem)
我认为这与答案基本相同。