2012-12-05 48 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)); 
}