2017-10-15 9 views
1

Dans le composant DateTimeField, il affiche à la fois la date (année, mois, jour) et l'heure (heure, minute, seconde). Maintenant je ne veux pas avoir de date. Toute idée permettant seulement de montrer et d'obtenir du temps (heure: minute: seconde)?Personnaliser DateTimeField dans Vaadin 8

Répondre

1

tl; dr

Non intégré manière d'afficher l'heure de la journée seulement, au Vaadin 8.1.

Vous pouvez faire votre propre.

Détails

Le widget existant DateTimeField]() ne supporte que l'héritage GregorianCalendar classe qui est une combinaison d'une date et un temps de jour, plus un fuseau horaire. Donc pas utile pour les valeurs de l'heure du jour seulement. Malheureusement, à partir de Vaadin 8.1, il semble que les widgets de terrain groupés n'ont pas encore été mis à jour pour les types java.time tels que le java.time.LocalTime que vous voulez.

Pour contourner le problème de l'absence d'une LocalTime intelligente champ -savvy, je suggère soit:

  • Essayez le date-time-fields Add-on.
    Un add-on est une extension que vous pouvez ajouter à votre projet Vaadin, pour délivrer un certain nombre de fonctionnalités liées à Vaadin. Un module complémentaire peut être lié à un widget visuel ou peut être une fonction de backend non visuelle. Si cela est visuel, vous devrez peut-être reconstruire votre projet pour que le jeu de widgets soit recréé. Peut-être un Maven clean et install (pas sûr que la technique de ce change en fonction des différentes versions Vaadin).
  • Faites votre propre. Utilisez un champ de texte normal. Ecrivez un validateur pour vérifier l'entrée de l'utilisateur parses en tant qu'objet LocalTime. Vous avez le choix d'écrire un validateur spécifique à Vaadin ou un validateur standard Bean Validation. Voir How to add Validators in Vaadin 8?

Exemple

Voici un code rugueux pour créer votre propre LocalTime champ -savvy. Ce n'est en aucun cas complet, mais peut vous aider à vous orienter dans la bonne direction.

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); 
     } 
    } 
});