Этот
Тип свойства java.sql.Date не соответствует типу поля java.time.LocalDate. Привязку нужно настраивать вручную с помощью конвертера.
говорит что делать. Не видя вашего кода, я предполагаю, что у вас есть Vaadin DateField
в каком-то Vaadin FormLayout
, который вы пытаетесь заполнить значением java.sql.Date
(или binder.bindInstanceFields()
попыток).
К сожалению, DateField
, похоже, принимает только LocalDate
. Следовательно, вам нужно как-то преобразовать значение.
В иерархии типов vaadin Converter
есть много разных конвертеров "даты", но этот отсутствует (или, может быть, я его пропустил?), Поэтому я его создал:
public class SqlDateToLocalDateConverter
implements Converter<LocalDate,java.sql.Date> {
@Override
public Result<java.sql.Date> convertToModel(LocalDate value,
ValueContext context) {
if (value == null) {
return Result.ok(null);
}
return Result.ok( java.sql.Date.valueOf( value) );
}
@Override
public LocalDate convertToPresentation(java.sql.Date value,
ValueContext context) {
return value.toLocalDate();
}
}
Кажется, вы пользуетесь декларативным интерфейсом? Я не могу сейчас сказать, как портировать это с небольшими усилиями.
Если бы вы связывали поля вручную, это выглядело бы так:
binder.forField(myForm.getMyDateField())
.withConverter(new SqlDateToLocalDateConverter())
.bind(MyBean::getSqlDate, MyBean::setSqlDate);
Итак, я думаю, вам нужно найти способ добавить этот конвертер для обработки предполагаемого DateField
. В любом случае сообщение предполагает, что вы, возможно, не сможете использовать простой binder.bindInstanceFields()
способ, а привязать поля вручную.
person
pirho
schedule
12.11.2017