0
Converterを使用してVaadinのDateFieldを使用して、java.timeパッケージのLocalDateTimeの使用を有効にしています。コンバータを使用しているときのVaadin DateFieldの範囲の設定
私はコンバータを使用していて、setRangeEnd()によってDateFieldを制限すると、DateFieldは常に 'Date is allowed Range'というメッセージとともに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;
}
}
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());
誰もが知っていますか?
[RangeValidator](http://demo.vaadin.com/javadoc/com.vaadin/vaadin/7.0.0.alpha3/com/vaadin/data/validator/RangeValidator.html)を使用することができます。例: 'これが機能するには、 'dateField.setRangeStart(..)'と 'dateField.setRangeEnd()を削除しなければならないでしょう。dateField.addValidator(new RangeValidator (..) 'これは、「エントリなし」カーソルが範囲の終わりより大きい日付に表示されないようにするため、ユーザーが選択できるようにします(検証メッセージが表示されます)。答えは –
@Ianあなたの答えをありがとうございます。setRangeメソッドを使用する主な理由は、選択できない日付のデータがないという情報をユーザーに示すことです。 DateFieldクラス。それについての良いことは、私が行うことですもうコンバータは必要ありません。 –