#java #vaadin
#java #vaadin
Вопрос:
У меня есть текстовое поле, которое я хочу переключить как обязательное поле или нет, в зависимости от того, установлен ли флажок. Я не могу заставить ValueChangeEventListener работать нормально.
Это то, что у меня есть до сих пор:
private TextField myTextField = new TextField("Name");
myTextField.setRequired(true);
private CheckBox myCheckBox;
myCheckBox = createCheckBox();
private CheckBox createCheckbox() {
CheckBox checkBox = new CheckBox("My checkbox");
checkBox.setImmediate(true);
checkBox.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
toggleRequired();
}
});
return checkBox;
}
private void toggleRequired() {
if (myCheckBox.getValue() != true) {
myTextField.setRequired(false);
} else {
myTextField.setRequired(true)
}
}
valueChangeListener запускается слишком много раз, переходя от true к false обратно к true. Не уверен, что я здесь делаю не так, и был бы очень признателен за помощь.
Спасибо
Комментарии:
1. Разве ваша
else
ветка не должна читатьmyTextField.setRequired(true);
вместоmyCheckBox.setRequired(true)
? Вероятно, вы могли бы просто написатьmyTextField.setRequired(myCheckBox.getValue());
, чтобы упростить его.2. Спасибо, что указали на это, это опечатка, я отредактирую вопрос!
Ответ №1:
Хорошо, я понял это! Это было очень простое решение, все, что мне нужно было изменить, было
checkBox.addValueChangeListener(new CheckBox.ValueChangeListener() {});
Вместо этого я ссылался на следующий класс свойств:
properties.ValueChangeListener();