Managed Bean avec les annotations JSF 2.0

Managed Bean avec les annotations JSF 2.0

La version 2.0 de JSF a apporté de nombreuses nouveautés.

Parmi elles, l’utilisation des annotations pour la déclaration des Managed Beans.

Nous allons mettre en place un exemple simple - compteur de clique sur un bouton - pour illustrer cette nouvelle utilisation.

Environnement

Pour cet article, j’ai utilisé l’implémentation 2.0 de JSF sur un serveur GlassFish 3.

  • Eclipse 3.5 Galileo
  • GlassFish 3
  • JDK Sun 1.6
  • JSF 2.0

Création du projet et configuration

Pour la mise en place, vous pouvez vous reporter aux chapitres Création du projet et Configuration de l’article JSF 2.0 et les composants ‘composite’.

Dans la vue Navigator, voici l’arborescence :

JSFManagedBean
 |- .settings/
 |- build/
 |- src/
 |- WebContent/
 |   |- META-INF/
 |   |- WEB-INF/
 |   |- compteur.xhtml
 |- .classpath
 |- .project

Création du Managed Bean

Dans un premier temps, nous allons mettre en le Managed Bean.

Les versions 1.x de JSF imposaient de déclarer nos objets dans un fichier de configuration : faces-config.xml.

Il est toujours possible de le faire dans la version 2.0 mais le but de cet article est de montrer l’utilisation des annotations.

Pour cela, créez une classe fr.benjaminprevot.jsf.bean.CompteurBean dans le répertoire src du projet.

package fr.benjaminprevot.jsf.bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * @author Benjamin PREVOT
 */
@ManagedBean
@SessionScoped
public class CompteurBean {

  private int compteur = 0;

  public int getCompteur() {
    return compteur;
  }

  public void incrementer() {
    compteur++;
  }

}

Comme vous pouvez le voir, nous utilisons 2 annotations pour définir notre Managed Bean :

  • @ManagedBean : déclare la classe comme définissant un Managed Bean
  • @SessionScoped : définit le scope de notre Bean ; ici, il aura une portée session

Vous trouverez plus de détails ici : http://java.sun.com/javaee/javaserverfaces/2.0/docs/managed-bean-api/index.html.

Dans cette classe, nous avons défini un attribut compteur qui comptera simplement le nombre de cliques sur un bouton.

Vous pouvez remarquer que l’accesseur à cet attribut est aussi déclaré ; pour accéder à une propriété d’un Manager Bean, vous devez impérativement définir les getters / setters nécessaires ; un attribut n’est jamais lu / modifié directement.

Enfin, la méthode incrementer permet d’ajouter un au compteur courant.

Utilisation du Managed Bean

Nous allons maintenant mettre en place une page compteur.xhtml dans le répertoire WebContent du projet.

<?xml version="1.0" encoding="UTF-8"?>
<!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:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:tag="http://java.sun.com/jsf/composite/tag">
  <h:head>
    <title>Compteur</title>
  </h:head>
  <h:body>
    <f:view>

        <h:outputText value="Nombre de cliques : #{compteurBean.compteur}" />

      <h:form>
        <h:commandButton action="#{compteurBean.incrementer}" value="Incr&eacute;menter" />
      </h:form>
    </f:view>
    </h:body>
</html>

Dans un premier temps, nous affichons la valeur du compteur (<h:outputText value="Nombre de cliques : #{compteurBean.compteur}" />).

Pour accéder au Managed Bean, il suffit d’utiliser les Expression Language (#{...}) et d’utiliser le nom de la classe (minuscule pour la première lettre).

Vous pouvez remarquer que nous utilisons le nom de l’attribut pour le lire ; comme je vous l’indiquais précédemment, il faut pour cela que le getter existe.

Ensuite, nous définissons un bouton qui va appeler la méthode incrementer : <h:commandButton action="#{compteurBean.incrementer}" value="Incr&eacute;menter" />.

N’oubliez pas de l’entourer de la balise <h:form> pour que l’action fonctionne.

Test

Vous pouvez maintenant déployer l’application et démarrer le serveur.

Dans un navigateur, utilisez l’adresse http://localhost:8080/JSFManagedBean/compteur.jsf.

Une page contenant le message Nombre de cliques : 0 apparaît avec un bouton Incrémenter.

En cliquant sur le bouton, vous pourrez alors voir le compteur augmenter.