2016-03-07 79 views
0
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) 
}) 

最終的logline給我正確的值vaadin但我得到警告:入門選擇從目錄選擇項目與scaladin

您正在使用的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

那麼,什麼是確定所選擇的項目,並沒有得到警告的正確方法?

回答

0

你的方式來獲得價值

val selItem = userList.getItem(e.property.value.get).getProperty("user") 

是正確的。問題是在隱式轉換爲字符串內

logger.info("{}",selItem) 

正確的方式是讓setItem.getValue(),然後檢查它的類型,轉換爲字符串,然後調用loger。

0

結束了與此:

val selItem = userList.getItem(e.property.value.get).getProperty("user").value.get.asInstanceOf[User] 
logger.info("{}", selItem) 

我認爲這是本質上是相同的答案公佈。