我想在我的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/

10-11 08:02