0
Converter를 사용하여 Vaadin의 DateField를 사용하여 java.time 패키지의 LocalDateTime을 사용하도록 설정합니다.변환기를 사용할 때 Vaadin DateField의 범위 설정
Converter를 사용하고 setRangeEnd()로 DateField를 제한하면 DateField는 항상 'Date is allowed Range'메시지와 함께 UserError를 표시합니다. 변환기를 사용하지 않으면 제대로 작동합니다.
내 변환기 다음하여 DateField를 사용하는 것입니다
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 (..)'이것은 "엔트리 없음"커서가 범위 끝보다 큰 날짜에 표시되지 않기 때문에 사용자가 선택할 수 있도록 유효성 검사 메시지가 표시 될 수 있음을 의미합니다.이 이유로 나는 이것을 추가하기를 꺼립니다. Answer –
@Ian 답장을 보내 주셔서 감사합니다. setRange 메서드를 사용하는 주된 이유는 선택할 수없는 날짜에 사용할 수있는 데이터가 없다는 정보를 사용자에게 표시하기 위해서입니다. DateField 클래스. 좋은 점은 내가하는 것입니다. 더 이상 컨버터가 필요하지 않습니다. –