Ваадин 8 Дейтфилд

Как я могу скрыть немедленную проверку поля даты в Vaadin 8. У меня есть следующий код

dateField.setLocale(new Locale("fr", "CA"));

binder.forField(dateField).withValidator(new Validator<LocalDate>() {
  @Override
  public ValidationResult apply(LocalDate value, ValueContext context) {
    if (LocalDate.now().equals(value)) {
      return ValidationResult.ok();
    } else {
      return ValidationResult.error("the date is not the current date");
    }
  }
}).withValidationStatusHandler(new BindingValidationStatusHandler() {
  @Override
  public void statusChange(BindingValidationStatus<?> statusChange) {
    if (statusChange.getResult().isPresent()) {
      ValidationResult validationResult = statusChange.getResult().get();
      if (validationResult.isError()) {
        label.setCaption("the date is not the current date");
      } else {
        label.setCaption("the date IS the current date");
      }
    }
  }
}).bind(CustomDate::getLocalDate, CustomDate::setLocalDate);

Однако в результате выполняется проверка vaadin по умолчанию (например, когда введенный формат даты не является ожидаемым форматом) и моя проверка. Я хочу выполнить проверку формата в моем валидаторе. как этого добиться.

введите здесь описание изображения


person FarFarAway    schedule 17.01.2018    source источник
comment
Не имеет отношения к вашему вопросу, но я рекомендую использовать лямбда-выражения Java 8 вместо анонимных классов, чтобы немного улучшить читаемость.   -  person Steffen Harbich    schedule 17.01.2018


Ответы (2)


Возможно, использование setComponentError подходит для вашего варианта использования. Он должен предоставить способ переопределить сообщение об ошибке по умолчанию.

Примеры см. в разделе Обработка ошибок.

person Mika    schedule 17.01.2018

Я не пробовал, но вы можете проверить, работает ли это так, как описано в документации (здесь):

DateField date = new DateField("My Date") {
    @Override
    protected Result<LocalDate> handleUnparsableDateString(
          String dateString) {
        try {
            // try to parse with alternative format
            LocalDate parsedAtServer = LocalDate.parse(dateString, DateTimeFormatter.ISO_DATE);
            return Result.ok(parsedAtServer);
        } catch (DateTimeParseException e) {
           return Result.error("Bad date");
        }
    }
};

Согласно документации, проверку на стороне клиента можно скрыть с помощью CSS.

person Steffen Harbich    schedule 17.01.2018