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); 
     } 
    } 
}); 
関連する問題