2012-12-05 84 views
3

我有一個組合框,其中用戶類型的值從Web服務加載。如果沒有找到任何值,我想將組合框重置爲空值。在不使用Web服務具有固定2項的示例:Vaadin組合框選擇以前的值而不是空值

ComboBox comboBox = new ComboBox(); 
comboBox.addItem("First item"); 
comboBox.addItem("Second item"); 
comboBox.setNullSelectionAllowed(true); 
comboBox.setInputPrompt("Select an item:"); 
comboBox.select("First item"); 

當我試圖在輸入提示符下鍵入「第三」,然後單擊遠到鬆散焦點,「第一項目」保持選定。

當我試圖通過手動調用comboBox.select(null)comboBox.select("")或甚至comboBox.setValue(null)覆蓋此行爲時,仍然選中「第一項」。 這聽起來像是一個comboBox bug,但也許有人知道一個解決方法。

回答

3

作爲快速解決方案,您可以使用此代碼。只需將空元素添加到組合框和模糊處,或者選擇需要執行的操作。

final ComboBox comboBox = new ComboBox(); 
comboBox.addItem(""); 
comboBox.setNullSelectionItemId(comboBox.getItem("")); 

comboBox.addItem("First item"); 
comboBox.addItem("Second item"); 
comboBox.setNullSelectionAllowed(true); 
comboBox.setInputPrompt("Select an item:"); 
comboBox.select("First item"); 

comboBox.addListener(new BlurListener() { 

@Override 
public void blur(final BlurEvent event) { 
     comboBox.setValue(""); 
    } 
}); 
0

添加以下行代碼:

combobox.setImmediate(true); 

這將顯示所選擇的值,而不是之前的一個。

0

由於removeAllItems()不適用於combobox,您可以刪除單個項目以獲得相同效果。

例如爲:

//get state combos ids  

列表stateIDs =(列表)state.getItemIds();

for(int i=0;i<stateIDs.size();i++){ 
    state.removeItem(stateIDs.get(i)); 
}