Exemple d’utilisation Wildfly, JSF et Generic System : ajout de la valeur par défaut d’une relation

Nous allons voir dans ce billet comment ajouter une valeur par défaut à une relation. Pour cela, reprenons notre application précédente.

Ajouter une relation CarColor dans le modèle de données

Color.java

Nous allons commencer par ajouter le type Color grâce à la configuration statique de Generic System.

Nous avons vu que le paramétrage statique permettait d’ajouter des types dans Generic System. De la même manière, nous pouvons grâce au paramétrage statique créer des instances.
Nous allons maintenant ajouter de manière statique des instances de Color. Nous utiliserons pour cela les annotations :

  • @SystemGeneric qui déclare que la classe annotée correspond à un noeud du graphe statiquement paramétré ;
  • @Meta qui permet de définir le méta, donc le type de notre instance ;
  • @StringValue qui permet de définir la valeur qui sera une String.

CarColor.java

Ajoutons de manière statique la relation CarColor. Les annotations utilisées sont :
L’annotation @SystemGeneric qui déclare que la classe CarColor correspond à un noeud du graphe statiquement paramétré.
L’annotation @Components qui spécifie que notre classe annotée est un composite des classes indiquées dans l’annotation.
L’annotation @SingularConstraint ; nous allons ainsi créer une relation 1-n. Une Car n’aura qu’une seule Color, mais une Color pourra correspondre à plusieurs Car.

Pour créer une valeur par défaut d’une relation, il suffit de créer un lien entre le type auquel nous voulons ajouter la valeur par défaut et l’instance correspondant à la valeur que nous souhaitons ajouter.
Par exemple, ici nous allons ajouter l’instance de Color White par défaut en faisant le lien entre le type Car et l’instance White.

Modifier notre application pour l’affichage et la modification de la Color

Pour afficher les couleurs, nous ajoutons un bean ColorBean avec une méthode permettant de récupérer les instances de Color.

Pour afficher et modifier la couleur d’une instance de Car, nous ajoutons au bean CarBean une méthode permettant de récupérer (getValue) et assigner (setValue) la valeur de la couleur pour l’instance Car, de la même manière que ce que nous avions fait pour la puissance.

Nous gardons le même formulaire d’ajout du Car et du Power, pour mettre en évidence que la couleur va bien être ajoutée par défaut.
Nous rajoutons une colonne dans notre tableau de Car, afin de visualiser pour chaque Car sa Color et de pouvoir modifier celle-ci.
La modification de la Color se fait au moment de la sortie de la liste déroulante par un appel AJAX. Voyons l’extrait de la page xhtml correspondant :

snapshot_jsf_gs_example_11