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 в качестве метода, возвращающего логическое значение.