2017-10-15 3 views
1

DateTimeField 구성 요소에는 날짜 (년, 월, 일)와 시간 (시, 분, 초)이 모두 표시됩니다. 이제 데이트를하고 싶지 않습니다. 보여 주기만하고 시간을 얻을 수있는 아이디어 (시 : 분 : 초)?Vaadin 8에서 DateTimeField 사용자 지정

답변

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 프로젝트에 추가 할 수있는 확장 프로그램입니다. 애드온은 시각적 위젯과 관련되거나 비 시각적 백엔드 기능 일 수 있습니다. 이와 같이 시각적 인 경우 위젯 세트를 다시 만들려면 프로젝트를 다시 빌드해야 할 수 있습니다. 아마도 Maven cleaninstall (이것에 대한 기술이 다양한 Vaadin 릴리즈에서 계속 변하고있는 것은 확실하지 않음).
  • 직접 만드십시오. 일반 텍스트 필드를 사용하십시오. 사용자 입력 parsesLocalTime 개체로 확인하는 유효성 검사기를 작성합니다. 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); 
     } 
    } 
});