Почему ComboBox setValue не работает в Vaadin? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть простой код:

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");

Но он также не работает.Этот код работает, только если значение в combo пусто, но если я что-то ввожу в combo, код просто очищает значение на .setItems(), и далее .setValue() не работают.

Если значение combo пусто, кодхорошо работает.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Чтобы лучше показать, что я имел в виду в своем комментарии, я пишу это как ответ.
Я имел в виду установить пустую коллекцию не в clickListener, а непосредственно после инициализации ComboBox:

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");
    }
});

Пожалуйста, попробуйте и дайте мне знать, если это работает

0 голосов
/ 28 февраля 2019

Ваш код отлично работает в минимальном проекте, основанном на 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);
    }
}

Какое бы значение вы не указали в ComboBox через пользовательский интерфейс ... когдаПри нажатии этой кнопки выбранное значение изменится на 22.

Если это вариант для вас, вы можете обновить его до более новой версии Vaadin и попробовать его с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...