为什么ComboBox setValue在Vaadin中不起作用?

时间:2019-02-27 18:03:40

标签: combobox vaadin setvalue

我有简单的代码:

ComboBox<String> combo=new ComboBox<>("Combo");
Button button = new Button("Button");
button.addClickListener(new ComponentEventListener<ClickEvent<Button>>() {
    @Override
    public void onComponentEvent(ClickEvent<Button> event) {
        combo.setItems("11","22");
        combo.setValue("22");
    }
});

当我第一次单击按钮时,组合框中显示项目“ 11”和“ 22”,并且选择了值“ 22”。

第二次单击可清除值,但项目“ 11”和“ 22”仍然存在。 如果我在组合框中选择“ 11”或保留“ 22”,然后单击按钮-清除值。

似乎setValue()仅在组合框为空时有效,但以下代码也无济于事:

        combo.setValue(null);
        combo.clear();
        combo.setItems("11","22");
        combo.setValue(null);
        combo.clear();
        combo.setValue("22");

以下代码正确设置了ComboBox的值,无论我选择某些值还是在单击之前清除它:

ComboBox<String> combo=new ComboBox<>("Combo");
combo.setItems("11","22");
Button button = new Button("Button");
button.addClickListener(new ComponentEventListener<ClickEvent<Button>>() {
    @Override
    public void onComponentEvent(ClickEvent<Button> event) {
        combo.setValue("22");
    }
});

但是我必须动态设置Combobox的项目,最后一个解决方案不适合我。 Vaadin版本是10.0.9。 有没有人有什么建议或建议?

PS。 谢谢!

我尝试了以下代码:

 combo.setItems(Collections.emptyList());
 combo.setItems("11","22");
 combo.setValue("22");

但是效果不佳。 该代码仅在组合中的值为空时才有效,但是如果我在组合中输入了某些内容,则该代码仅会通过.setItems()清除值,并且进一步.setValue()无效。

如果combo的值为空,则代码运行良好。

2 个答案:

答案 0 :(得分:0)

您的代码在基于https://vaadin.com/start/latest/project-base(使用Vaadin 12.0.7)的最小项目中运行良好。

@Route("")
@PWA(name = "Project Base for Vaadin Flow", shortName = "Project Base")
public class MainView extends VerticalLayout {

    public MainView() {
        ComboBox<String> combo=new ComboBox<>("Combo");
        Button button = new Button("Button");
        button.addClickListener(new ComponentEventListener<ClickEvent<Button>>() {
            @Override
            public void onComponentEvent(ClickEvent<Button> event) {
                combo.setItems("11","22");
                combo.setValue("22");
            }
        });
        add(combo,button);
    }
}

无论您通过UI在组合框中设置的值..单击按钮时,所选值都将切换为22。

如果这是您的选择,则可以更新到新的Vaadin版本,然后尝试使用该版本。

答案 1 :(得分:0)

为了更好地显示我在评论中的意思,我将其写为答案。
我的意思是在初始化ComboBox之后直接在clickListener中设置一个空集合:

ComboBox<String> combo=new ComboBox<>("Combo");
combo.setItems(Collections.emptyList());
Button button = new Button("Button");
button.addClickListener(new ComponentEventListener<ClickEvent<Button>>() {
    @Override
    public void onComponentEvent(ClickEvent<Button> event) {
        combo.setItems("11","22");
        combo.setValue("22");
    }
});

请尝试一下,让我知道是否可行