JSF 2.0 avec Netbeans 6.8 et Glassfish v3

Mike François

J'ai réalisé la traduction d'un article anglais de David Salter, auteur du livre Seam 2.x Web Development, qui nous explique l'utilisation de JSF 2 avec Facelets et les Beans.

Vous pouvez lire l'article original ici.

Commentez ♪

- Titre : JSF 2.0 avec Netbeans 6.8 et Glassfish v3

- Auteur : Mike François

- Parution : 21 avril 2009

- Licence : Copyright ® 2009 . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. JSF 2 : les Backing Beans

- III. Messages du framework Bean Validation

- IV. Messages de demande de localisation

- V. Remerciements

- VI. Liens

I - Introduction

En utilisant Netbeans 6.8 M1 et Glassfish v3, il est possible d'écrire une application web Java EE 6. Dans cet article, je vais vous montrer comment sont gérés les beans et comment ils sont liés dans les pages avec le framework Facelets. Je vais aussi vous montrer comment localiser l'application pour son utilisation avec des langues différentes. Enfin, je vais vous montrer le framework de Bean Validations (JSR-303) pouvant ajouter de simples validations aux POJO.

Pour montrer ces fonctions, j'ai écrit un simple programme "Hello World» .
Vous pouvez télécharger le code source ici.

Cet article suppose que vous avez NetBeans 6.8M1 et GlassFish v3 installés. Il suppose aussi que vous avez une compréhension des bases de JSF 1.x.

Anatomie d'une application JSF 2

En JSF 2, Facelets est la technologie de vue recommandée par rapport à JSP. Facelets permet l'insertion de balises de marquage pouvant être définies comme le XML, ce qui donne l'avantage à celui-ci de pouvoir être automatiquement analysé par les IDE tels que NetBeans.
Je suppose que vous êtes familier avec Facelets.
Toutefois, vous pouvez en savoir plus sur Facelets dans le livre « Seam 2.x Web Development ».

Dans la classique application « Hello World », l'utilisateur est invité à entrer son nom.
Il en est de même dans notre application, avec le formulaire de saisie défini comme suit :

<h:form id="helloForm">
<h:panelGrid columns="3">
<h:outputText value="#{msgs.whatIsName}"/>
<h:inputText id="name" value="#{helloBean.name}"/>
<h:message for="name" styleClass="error"/>
<h:commandButton action="#{helloBean.sayHello}" value="Hello"/>
</h:panelGrid>
</h:form>

À travers cette capture d'écran, on peut voir plusieurs choses.

Le texte de sortie (« What is your name ») est défini par l'EL #{msgs.whatIsName}.
Cela nous permet de facilement internationaliser notre application (nous jetterons un rapide coup d'œil sur l'internationalisation).
Le nom saisi est enregistré dans la propriété « name » du managed bean « helloBean ».

<h:message/>

Nous avons utilisé l'élément pour afficher un message d'erreur si le nom n'est pas valide. Ceci sera exposé via le Framework Bean Validation du managed bean.
L'appui sur le bouton invoque la méthode « sayHello » du Bean « helloBean ».

II - JSF 2 : les Backing Beans

Pour les applications JSF 1, les backing beans ont été écrits via des POJO et ensuite ont été déclarés à JSF via la configuration XML dans le fichier faces-config.xml. Avec JSF 2, les backing beans ou les managed beans sont déclarés via des annotations Java 5. Pour déclarer un bean en tant que managed bean, nous avons simplement besoin d'un bean déclaré avec l'annotation @ManagedBean. Ainsi, pour rejoindre l'exemple précédent, nous pouvons écrire un managed bean ainsi :

@ManagedBean(name="helloBean")
@RequestScoped
public class HelloBean {
@Pattern(regexp="(.+)", message="{constraint.invalid.name}")
private String name;
public HelloBean() {
}
public String sayHello() {
return "hi";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

Vous pouvez voir que c'est un simple POJO, cependant, il existe plusieurs annotations.
@ManagedBean. Ceci est la définition d'un POJO géré comme un managed bean. Le bean en question est appelé « helloBean ».
@RequestScope. Cette annotation définit que le bean demande une portée basée sur la requête, ce qui signifie que le bean sera instancié pour la durée de la requête HTTP.
@Pattern. Cette annotation est une partie du framework Bean Validation. Cette annotation précise que le « nom » doit être conforme à l'expression régulière définie par regexp - (. +) C'est-à-dire dans le cas présent, une chaîne non vide. Si l'attribut de validation échoue, le message défini par la propriété « message » est affiché.

Ce managed bean possède une propriété « nom », qui est liée à la page Facelets en utilisant l'expression #{helloBean.name}. Le managed bean a une méthode, « sayHello », qui est appelée à partir de la page Facelets via l'expression #{helloBean.sayHello}. Dans cet exemple d'application, en appuyant sur le bouton « sayHello », la méthode retournera la chaîne« salut ». JSF utilise alors les règles de la navigation dans le fichier faces-config.xml afin de déterminer ce qui sera affiché à la page suivante. Il n'y a rien de différent à partir d'une application JSF 1.

<navigation-rule>
<from-view-id>/main.xhtml</from-view-id>
<navigation-case>
<from-outcome>hi</from-outcome>
<to-view-id>/hello.xhtml</to-view-id>
</navigation-case>
</navigation-rule>

Pour finir notre aperçu des grandes lignes d'une application JSF 2, tout ce qui reste est de définir le fichier de ressources pour l'application de localisation et les ressources nécessaires pour le framework Bean Validation.

III - Messages du framework Bean Validation

Le framework Bean Validation lit ses ressources localisées à partir d'un fichier appelé « ValidationMessages.properties » dans le package par défaut de l'application Web. Ce fichier est un simple fichier de propriétés : constraint.invalid.name = « S'il vous plaît, entrez un nom ».

IV - Messages de demande de localisation

Les messages de l'application sont stockés dans un simple fichier de propriétés. L'emplacement de ce fichier est défini dans le fichier faces-config.xml comme indiqué ci-dessous :

<application>
<resource-bundle>
<base-name>com.davidsalter.jsf2helloworld.messages</base-name>
<var>msgs</var>
</resource-bundle>
</application>

Maintenant que nous avons vu comment une application JSF 2 est développée, vous pouvez essayer d'exécuter l'application d'exemple pour voir par vous-même. J'espère que cet article vous a donné un aperçu de JSF 2, et qu'il vous incitera à développer de nouvelles applications JSF 2.

V - Remerciements

Je tiens à remercier David Salter pour l'autorisation de traduction et de publication de son article.
Tout autant, je remercie Romaintaz pour la relecture de cet article.

VI - Liens

Si vous voulez en savoir plus sur Facelets, vous pouvez consulter l'article de djo.mos.