vaadin flow DateTimePicker возвращает null, если введено только одно поле

Я использую DateTimePicker с потоком vaadin 23.0.5.

Проблема в том, что если пользователь вводит только дату или время (но не оба), то, когда я сохраняю поле с помощью связующего, результатом будет null LocalDateTime.

      import com.vaadin.flow.component.datetimepicker.DateTimePicker;

private DateTimePicker noticeTwoDateTime;

noticeTwoDateTime = new DateTimePicker(label);
        layout.add(field);

binder.forField(this.noticeTwoDateTime).bind(
                NoticeTemplate::getNoticeDateTwo,
                NoticeTemplate::setNoticeDateTwo);

Есть ли способ предупредить пользователя, что он должен ввести оба?

Я исследовал использование валидатора, но он передает только LocalDateTime, который, конечно, равен нулю.

2 ответа

Обходной путь: если вы пометите поле как обязательное/обязательное, DateTimePickerпоказывает сообщение об ошибке, если один из них отсутствует.

Да, конечно, вы не хотите отмечать каждую дату/время по мере необходимости....

Эта проблема, по-видимому, уже существовала в Vaadin 14: Vaadin 14 DateTimePicker с необязательным временем или предупреждением об отсутствии времени

Прежде всего, вы можете использовать вспомогательный текст, как описано здесь:https://vaadin.com/docs/latest/ds/components/date-time-picker/#providing-input-guidance .

И если этого недостаточно, вы можете попытаться создать свою собственную процедуру проверки и использовать ее в связующем, например, здесь:https://vaadin.com/docs/latest/flow/binding-data/components-binder-validation/#defining . -валидаторы

Тогда это может выглядеть примерно так:

      myDateTimeBinding = binder.forField(myDateTimePicker)
                .withValidator(myDateTime -> Validation.validateDateTime(atdDateTimePicker.getValue()),
                        "Please pick Date and Time")
                .bind(......

с Validation в качестве класса Validation Utils и validateDateTime в качестве метода, возвращающего логическое значение.

Другие вопросы по тегам