使用scaladin

时间:2016-03-07 17:29:40

标签: scala vaadin

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.3scaladin 3.1.0

那么确定所选项目并且没有得到警告的正确方法是什么?

2 个答案:

答案 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)

我认为这与答案基本相同。