我有简单的代码:
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的值为空,则代码运行良好。
答案 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");
}
});
请尝试一下,让我知道是否可行