Exemple d’utilisation Wildfly, JSF et Generic System

Nous allons voir dans ce billet comment réaliser simplement une application JSF en utilisant Generic System dans un environnement JEE avec Wildfly.
Cette application est récupérable depuis le repository GIT (ici).

Configuration Environnement

Maven

Web.xml

beans.xml

Fichier nécessaire pour autoriser CDI à scanner les classes de l’archive.

Configuration Generic System

Par défaut, Generic System n’est pas persistant. Pour activer cette fonctionnalité nous devons spécialiser le bean PersistentDirectoryProvider pour que la méthode getDirectoryPath() retourne le répertoire où seront enregistrées les sauvegardes. Nous créons donc une classe java MyPersistentDirectoryProvider :

L’annotation Specializes est une annotation CDI (voir la documentation ici)

Modèle de données

Nous utilisons la configuration statique de Generic System pour mettre en place notre modèle de données. Pour cela, nous créons deux classes : Car et Power.

Car.java

Ici Car est un type, afin de le spécifier à GS il nous suffit d’ajouter l’annotation @SystemGeneric.

Power.java

Ici Power est une propriété de Car qui prend comme valeur des entiers. Pour le spécifier à GS nous utiliserons :
L’annotation @Components qui permet de définir notre composant Car,
L’annotation @PropertyConstraint qui permet de spécifier que c’est une propriété,
Et enfin l’annotation @InstanceValueClassConstraint qui permet de restreindre la classe des valeurs (ici des entiers).

Afficher les voitures

Pour afficher les voitures, nous avons créé un bean CarBean qui possède une méthode getCars et une référence à l’Engine.

Voyons maintenant notre page xhtml (index.xhtml) qui permet d’afficher ces voitures :

N’ayant aucune voiture pour le moment, notre page est vide. Voyons maintenant comment la remplir en ajoutant des voitures.

Ajout de voitures

Ajoutons a notre bean CarBean la fonctionnalité d’ajout de voiture.

Et modifions notre page xhtml :

Voyons le résultat en images :

snapshot_jsf_gs_example_4

Affichage et modification de la puissance

Pour afficher et modifier la puissance nous ajoutons une méthode au bean CarBean permettant de récupérer (getValue) et assigner (setValue) la valeur de l’attribut power pour l’instance voiture.

Nous modifions la puissance de la voiture au moment de la sortie de l’input text par un appel AJAX, voyons la page xhtml :

snapshot_jsf_gs_example_6

Suppression d’une voiture

Mettons maintenant en place la fonctionnalité de suppression.

snapshot_jsf_gs_example_7

Enregistrement et annulation

L’enregistrement ne se fait actuellement que sur le cache, il faut donc ajouter un bouton pour flusher les modifications et un autre pour les annuler.

snapshot_jsf_gs_example_9

Dans le prochain billet nous verrons comment ajouter une valeur par défaut à une relation.