Ваадин: Как установить валидацию ложной формы от слушателя - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть форма и несколько текстовых полей:

TextField taxNumber = new TextField();
taxNumber.setPrefixComponent(VaadinIcon.BARCODE.create());
accountApplicationBinder
    .forField(taxNumber)
    .withValidator(new StringLengthValidator(....

И у меня есть некоторая логика проверки в Слушателе:

taxNumber.addBlurListener(event -> {
   String localResult = "";

   InfoResult ir = ks.loadInfo(taxNumber.getValue()); 
   if ((ir.errorText == null) && (!ir.name.isEmpty())) { 
      ...
   } else {
      localResult = "";
      taxNumber.setInvalid(true);
      taxNumber.setErrorMessage("Not valid tax - " + accountApplicationBinder.isValid());
   }
   taxNumberStatusLabel.setText(localResult);
});

И я хочу получить поведение, похожее на".withValidator ... return not valid" в моем приемнике кнопки отправки.Другими словами: я хочу, чтобы моя кнопка отправки не работала, тогда taxNumber.addBlurListener возвращает недопустимый результат.Как я могу это сделать?

1 Ответ

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

мне кажется, что ваша логика в blurlistener повторяет проверку, которую вы уже установили, когда вы связали поле с .withValidator(new StringLengthValidator()).Этот Валидатор должен делать именно это.Когда вы нажимаете кнопку «Отправить», все, что вам нужно сделать, это проверить подшивку, а если она недействительна, не отправлять.Вы можете настроить строку ошибки, отображаемую в поле taxNumber, указав настроенную строку в StringLengthValidator:

.withValidator(new StringLengthValidator("Not valid tax", 4, null))

. Я только что понял, что у вас, вероятно, есть пользовательская проверка в ks.loadInfo(taxNumber.getValue()).Если это так, то лучший способ - заменить StringLengthValidator пользовательским валидатором, который вы можете написать, например, следующим образом:

.withValidator(taxNr -> {
    InfoResult ir = ks.loadInfo(taxNr);
    return ir.errorText == null && !ir.name.isEmpty();
}, "Not valid tax")
...