Java.time パッケージの LocalDateTime を使用できるようにするために、Vaadin の DateField と Converter を使用しています。
コンバーターを使用していて、setRangeEnd() によって DateField を制限すると、DateField は常に「日付が許可された範囲外です」というメッセージとともに UserError を表示します。コンバーターを使用しなくても問題なく動作します。
私のコンバーター:
public class LocalDateTimeToDateConverter implements Converter<Date,LocalDateTime> {
private static final long serialVersionUID = -4900262260743116965L;
@Override
public LocalDateTime convertToModel(Date value, Class<? extends LocalDateTime> targetType, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
if (value != null) {
return value.toInstant().atZone(ZoneOffset.systemDefault()).toLocalDate().atStartOfDay();
}
return null;
}
@Override
public Date convertToPresentation(LocalDateTime value, Class<? extends Date> targetType, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
if (value != null) {
return Date.from(value.atZone(ZoneOffset.systemDefault()).toInstant());
}
return null;
}
@Override
public Class<LocalDateTime> getModelType() {
return LocalDateTime.class;
}
@Override
public Class<Date> getPresentationType() {
return Date.class;
}
}
DateField を使用する MyView:
dateField = new DateField();
dateField.setDateFormat("yyyy-MM-dd");
dateField.setRangeStart(null);
dateField.setRangeEnd(Date.from(lastAvailableDataDate.atZone(ZoneId.systemDefault()).toInstant()));
dateField.setConverter(new LocalDateTimeToDateConverter());
コンバーターの使用中に範囲を設定する方法を知っている人はいますか?