DateTimeField 구성 요소에는 날짜 (년, 월, 일)와 시간 (시, 분, 초)이 모두 표시됩니다. 이제 데이트를하고 싶지 않습니다. 보여 주기만하고 시간을 얻을 수있는 아이디어 (시 : 분 : 초)?Vaadin 8에서 DateTimeField 사용자 지정
1
A
답변
1
TL; DR
없음 내장 방법은 Vaadin이 8.1로, 시간의 일 만 표시합니다.
직접 만들 수 있습니다.
세부
기존 DateTimeField
]() 위젯은 기존에게 날짜 및 시간의 일 플러스 시간대의 조합이다 GregorianCalendar
클래스를 지원합니다. 그래서 시간의 유일한 가치에 유용하지 않습니다.
불행히도, Vaadin 8.1부터는 번들 필드 위젯이 java.time.LocalTime
과 같은 java.time 유형에 대해 아직 업데이트되지 않은 것으로 보입니다. 지능형 LocalTime
-savvy 필드의 부족에 대한 해결 방법으로
- 가 date-time-fields Add-on를 사용해보십시오.
애드온은 Vaadin 관련 기능의 일부를 전달하기 위해 Vaadin 프로젝트에 추가 할 수있는 확장 프로그램입니다. 애드온은 시각적 위젯과 관련되거나 비 시각적 백엔드 기능 일 수 있습니다. 이와 같이 시각적 인 경우 위젯 세트를 다시 만들려면 프로젝트를 다시 빌드해야 할 수 있습니다. 아마도 Mavenclean
과install
(이것에 대한 기술이 다양한 Vaadin 릴리즈에서 계속 변하고있는 것은 확실하지 않음). - 직접 만드십시오. 일반 텍스트 필드를 사용하십시오. 사용자 입력 parses을
LocalTime
개체로 확인하는 유효성 검사기를 작성합니다. Vaadin 특정 유효성 검사기 또는 표준 Bean Validation 유효성 검사기를 작성할 수 있습니다. How to add Validators in Vaadin 8을 (를) 참조하십시오.
예 여기
은 자신의 LocalTime
-savvy 필드를 만들기위한 몇 가지 거친 코드입니다. 이것은 결코 완벽한 것은 아니지만 올바른 방향으로 안내 할 수 있습니다.
final Label whenLabel = new Label("when?");
final TextField whenField = new TextField();
whenField.setCaption("When:");
whenField.setValueChangeMode(ValueChangeMode.BLUR);
whenField.addValueChangeListener(new HasValue.ValueChangeListener <String>()
{
static final long serialVersionUID =0L;
@Override
public void valueChange (HasValue.ValueChangeEvent <String> valueChangeEvent)
{
String input = whenField.getValue();
System.out.println("input: " + input);
try
{
// DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_TIME; // Constant ISO_LOCAL_TIME is for time-of-day in standard ISO 8601 format.
// DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(Locale.CANADA_FRENCH); // Automatically localize.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(Locale.US); // Automatically localize.
LocalTime localTime = LocalTime.parse(input , f);
String timeIso8601 = localTime.toString();
whenLabel.setValue(timeIso8601);
} catch (DateTimeParseException e)
{
whenLabel.setValue(e.getClass().getCanonicalName());
System.out.println("ERROR - failed to parse input: " + input);
}
}
});