我想在我的vaadin ui中定义TwinColSelect中所选项目的最大数量。我该如何实现。我想允许用户从可用的8个行星中仅选择4个行星。我当前的代码是
TwinColSelect table = new TwinColSelect();
table.setImmediate(true);
String planets[] = {"Mercury", "Venus", "Earth", "Mars",
"Jupiter", "Saturn", "Uranus", "Neptune"};
for (int pl=0; pl<planets.length; pl++)
table.addItem(planets[pl]);
table.addListener(new Property.ValueChangeListener() {
public void valueChange(ValueChangeEvent event) {
/*String [] arr=(String [] )event.getProperty().getValue();
if(arr.length>=4){
return;
}*/
}
});
最佳答案
您可以通过更改select的值来实现以下内容:
//Constant declared somewhere in the class
private static final int SELECTED_ITEMS_LIMIT = 4;
...
table.addListener(new Property.ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
Collection selectedItems = (Collection) event.getProperty().getValue();
if(selectedItems.size()>SELECTED_ITEMS_LIMIT) { //Set no more than SELECTED_ITEMS_LIMIT values
Set<String> noMoreThanLimitItems = new HashSet<String>(selectedItems.size());
int counter = 0;
for(Object item : selectedItems) {
if(counter>=SELECTED_ITEMS_LIMIT) {
break;
}
noMoreThanLimitItems.add((String) item);
counter++;
}
event.getProperty().setValue(noMoreThanLimitItems);
}
}
});
缺点:
代码是服务器端的。因此,在浏览器请求之间选择时可能会出现四个以上的行星。
呼叫
Property.setValue
将触发ValueChangeEvent
。因此,当用户尝试选择四个以上的行星时,处理代码将每次执行两次关于java - 如何在TwinColSelect中定义所选项目的最大限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18605156/