Java JSF


Enumération en JSF

Interface de saisie WEB pour un enum

Exemple d’une interface en JSF pour saisir un type enum Java

Depuis Java 5, nous disposons d’un nouveau type de donnée, les énumérations. Ce type permet de définir une valeur à partir d’une liste prédéfinie. Un bon choix de composants de saisie pourrait être l’utilisation de boutons radio. Voyons comment réaliser cela en WEB avec des composants JSF  .


 Présentation

Cet exemple montre l’utilisation de boutons radios dans une interface web/JSF   pour saisir une donnée de type enum Java. Pour cela nous allons créer une petite application web qui sera principalement composée de la définition d’un type enum, un fichier d’interface xhtml et d’un bean de gestion de l’interface. L’application aura pour but de sélectionner l’un des 7 jours de la semaine.

 Définition de l’énumération

Le type enum définit les 7 jours de la semaine. Ce qui correspond au code suivant :

  1. package testjsf.metier;
  2.  
  3. public enum JourSemaine
  4. {
  5.         LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE;
  6. }

Télécharger

 Définition du Bean de gestion de la page JSF  

Définissons maintenant un bean de gestion de la page JSF :

  1. @Named
  2. @RequestScoped
  3. public class TestSaisieEnumView
  4. {
  5.   public JourSemaine[] getJoursSemaine()
  6.   {
  7.     return JourSemaine.values();
  8.   }
  9.   @PostConstruct
  10.   public void init()
  11.   {
  12.     jour = JourSemaine.LUNDI;
  13.   }
  14.   @Getter @Setter private JourSemaine jour;
  15. }

Télécharger

Cette classe définie un attribut jour de type JourSemaine qui sera la données à saisir. La méthode getJoursSemaine() renvoi un tableau contenant la liste composant l’énumération. La méthode init() permet de définir une valeur par défaut pour le jour à sélectionner.

Remarque : les annotaions @Getter/@Setter sont fournies par la librairie lombok que j’utilise dans mes projets pour éviter d’avoir à définir les méthodes Get/Set.

 Définition du fichier xhtml

Il ne reste plus qu’à définir l’interface dans un fichier xhtml :

Le composant de sélection est la balise :

<h:selectOneRadio id="jour" value="#{testSaisieEnumView.jour}">
 <f:selectItems value="#{testSaisieEnumView.joursSemaine}" />
</h:selectOneRadio>

L’attribut value fait référence à la variable à saisir.

Le rôle de la balise <f:selectItems> est chargé de créer un bouton radio pour chaque élément de l’énumération fournie par la méthode getJourSemaine().

Le reste du code ne sert que pour la mise en page et pour afficher le choix après un clique sur le bouton.

Voici l’écran :

 Définir un libellé pour les boutons radio

Par défaut, les libellés correspondent aux noms de chaque énumération. On pourrait souhaiter définir un libellé différent pour chaque élément. Comme en Java, les énumérations sont des classes, il est possible de définir des attributs, des méthodes et un constructeur. Nous allons donc ajouter un attribut libelle, un constructeur pour initialiser chaque objet puis, redéfinir la méthode toString(). Ce qui donne le code suivant :

  1. public enum JourSemaine
  2. {
  3.   LUNDI( "lundi"),
  4.   MARDI("mardi"),
  5.   MERCREDI( "mercredi" ),
  6.   JEUDI( "jeudi" ),
  7.   VENDREDI( "vendredi" ),
  8.   SAMEDI( "samedi" ),
  9.   DIMANCHE( "dimanche" );
  10.  
  11.   private JourSemaine( String libelle )
  12.   {
  13.     this.libelle = libelle;  
  14.   }
  15.   @Override public String toString()
  16.   {
  17.     return libelle;
  18.   }
  19.   private final String libelle;
  20. }

Télécharger

Nous n’avons rien d’autre à faire. Les libellé seront pris en compte automatiquement grâce à la méthode toString() qui a été redéfinie.

Remarque : Les constructeurs dans le cas d’énumérations sont implicitement privés puisque l’on ne peut pas créer de nouveaux élément (instance) dans une énumérations. Je n’ai rajouté le mot clé "private" que dans un but de clarté.

Après mise à jour, l’affichage donne le résultat suivant :

 Conclusion

Nous venons de voir dans ce petit exemple, qu’il était très simple d’utiliser le type enum dans une application JSF. Cet exemple nous a permis de vérifier que les énumérations Java ne sont pas de simples alias sur des entiers comme dans d’autre langages (comme C# par exemple), mais de véritables objets.


Ressources utilisées : Poste Ubuntu 14.04, Netbeans 8,1, Glassfish 4.1, lombok.

Article n° 81

Crée par: chris

Créé le: 8 décembre 2016

Modifié le: 8 décembre 2016

Nombre de visites: 970

Popularité: 9 %

Popularité absolue: 1

Mots clés de cet article


SPIP

2003-2024 LePpf
Plan du site | | RSS 2.0 | Sur YouTube

Visiteurs connectés : 9

Nombre moyen de visites quotidiennes sur le site: 206