Обычно это должно работать.Я создал минимальный пример с двумя ComboBox «основной» и «зависимый».Выбор зависимого ComboBox зависит от выбора основного ComboBox.Поэтому в главном ComboBox есть ValueChangeListener, который сбрасывает элементы и выбранное значение зависимого ComboBox.Когда вы запускаете приложение, вы видите, что предлагаемые элементы зависимого ComboBox изменяются и что ни один из этих новых элементов не выбран.
Я думаю, что вам нужно опубликовать больше своего кода (где вы звоните refreshProjectRequirementCombobox
от?), чтобы увидеть, что вы делаете по-другому.
Вот мой пример минимальный код проекта:
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
final ComboBox<String> main = new ComboBox<>();
final ComboBox<String> dependent = new ComboBox<>();
final Map<String, String[]> dependentsByMain = new HashMap<>();
dependentsByMain.put("A", new String[]{"AA", "AB", "AC"});
dependentsByMain.put("B", new String[]{"BA", "BB", "BC"});
dependentsByMain.put("C", new String[]{"CA", "CB", "CC"});
List<String> mainItems = new ArrayList<>(dependentsByMain.keySet());
main.setItems(mainItems);
dependent.setItems(Arrays.asList("Test1", "Test2", "Test3"));
dependent.setValue("Test1");
main.addValueChangeListener((HasValue.ValueChangeListener<String>) valueChangeEvent -> {
if (valueChangeEvent.getValue() != null) {
dependent.setItems(dependentsByMain.get(valueChangeEvent.getValue()));
dependent.setValue(null);
}
});
layout.addComponents(main, dependent);
setContent(layout);
}
ОБНОВЛЕНИЕ :
Естьпосмотрите на ответ Шринивасана Секара и его комментарии.Это ошибка в используемой версии (8.0.7), которая, по-видимому, исправлена в версии 8.5 (в соответствии с https://github.com/vaadin/framework/issues/9047#issuecomment-437864866). Я попробовал свой пример кода с версией 8.7.1, чтобы он работал. С версией 8.0.7 этоне.
Таким образом, основное решение заключается в обновлении используемой версии Vaadin. В качестве обходного пути (если не удается обновить версию Vaadin), вам в первую очередь необходимо установить значение ComboBox на ноль, а затем установить новые элементы.Таким образом, в моем примере ValueChangeListener должен выглядеть так:
main.addValueChangeListener((HasValue.ValueChangeListener<String>) valueChangeEvent -> {
if (valueChangeEvent.getValue() != null) {
dependent.setValue(null);
dependent.setItems(dependentsByMain.get(valueChangeEvent.getValue()));
}
});