JSF2.2 – Hello world

Voici un exemple d’une application JSF2.2 minimaliste. Une vue xhtml un bean Java contenant le message “Hello world !”. Une configuration minimaliste aussi pour pouvoir déployer l’application dans le serveur wildfly.
Vue d’ensemble et configurations
Pour cette application il est suffisant d’avoir un fichier Java
porteur des données (le model), un fichier xhtml
décrivant la vue et un quelques fichiers de configuration :
beans.xml
: ce fichier est vide dans cet exemple. Il permet à l’application de bénéficier du CDIfaces-config.xml
: ce fichier est vide dans cet exemple. Il permet de configurer tout ce qui est en lien avec JSFweb.xml
: ce fichier est facultatif je l’ai ajouté pour avoir un exemple de namespace XML pour la bonne version du serveur wildfly
Pour rappel, JSF est une technologie qui se base sur le modèle MVC-2. Le rôle du contrôleur est joué par la servlet JSF qui centralise les demandes provenant de la vue et qui redirige vers les bons traitements Java (avec JSF on parle en général d’actions).
Le model (Bean Java)
L’objet Java
qui va contenir les données, c’est à dire le message “Hello world !” est un String
. Cet objet va être créé par un producer en scope Request. A chaque nouvel appel à la vue, une nouvelle requête sera nécessaire et l’objet sera recréé de toute pièce.
package org.eiw.data; import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.enterprise.inject.Produces; import javax.inject.Named; /*** * Le producer est dans le scope Request, * il sera recréé à chaque nouvelle requête HTTP. */ @RequestScoped public class HelloWorldProducer { private String message; /** * La méthode qui produit l'objet de données vis à vis de la page XHTML. */ @Named @Produces public String getMessage() { return message; } /** * La méthode qui initialise l'objet, * à chaque nouvelle requête HTTP. */ @PostConstruct public void initMessage() { message = "Hello world !"; } }
La vue (XHTML)
Dans ce fichier, nous allons utiliser le conteneur CDI pour récupérer l’objet Java
des données vu ci-dessus. Nous allons ensuite l’associer à un tag JSF pour formater son affichage :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> </h:head> <h:body> <h:outputText value="#{message}" /> </h:body>
Pour récupérer l’objet, il faut utiliser son nom qui est égal par défaut au nom de l’instance avec le langage EL : #{maVariable}
.
Le déploiement
Pour déployer cette application, il suffit d’utiliser le plugin wildfly avec la commande suivante : mvn wildfly:run
. Ensuite de se rendre sur l’adresse http://localhost:8080/hello-world/index.jsf et de visualiser le résultat :
Remarque : s’il s’agit de la première fois que vous utilisez le plugin wildfly, il vous faudra un peu de temps pour démarrer l’application car il est nécessaire de télécharger, dans le repository maven local, le serveur complet avant de le démarrer.
Ce tutoriel est disponible sur GitHub à l’adresse suivante : https://github.com/yanLanglois/jsf-2.2-tutoriel/tree/master/hello-world.