Переключение текстового поля требуется / не требуется при установленном флажке

#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();