Externaliser les composants 'composite' de JSF 2.0

Externaliser les composants 'composite' de JSF 2.0

Nous avons vu dans un article précédent comment créer des composants ‘composite’ avec JSF 2.0 : JSF 2.0 et les composants ‘composite’.

Cependant, ces composants étaient directement inclus dans le projet, ce qui ne permet pas de les réutiliser.

Nous allons voir comment mettre en place un projet contenant nos composants afin de pouvoir les réutiliser par la suite.

Environnement

Pour cet article, j’ai utilisé la version 3 de GlassFish et son implémentation de JSF 2.0.

Les développements sont réalisés dans Eclipse 3.6.1 avec un JDK 1.6.

Mise en place du projet

Nous allons tout d’abord mettre en place le projet contenant les composants.

Pour cela, un simple projet Java dans Eclipse fera l’affaire.

L’arborescence est la suivante :

JsfComponent
 |- META-INF/
 |   |- resources/
 |   |   |- tag/
 |   |   |   |- hello.xhtml
 |   |- faces-config.xml
 |- .classpath
 |- .project

Le sous-répertoire tag représente l’identifiant de notre librairie de composants.

Le fichier hello.xhtml représente le composant.

<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:composite="http://java.sun.com/jsf/composite">
  <h:head>
  </h:head>
  <h:body>
    <composite:interface>
      <composite:attribute name="nom" required="true" />
    </composite:interface>

    <composite:implementation>
      <h1>Hello #{cc.attrs.nom}!</h1>
    </composite:implementation>
  </h:body>
</html>

Le fichier faces-config.xml ne contient que la balise racine ; mais il doit être présent pour que le composant soit réutilisable.

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
        version="2.0">
</faces-config>

Comme vous pouvez le voir, tous les fichiers doivent se situer dans le répertoire META-INF.

Génération de la librairie

Pour créer l’archive dans Eclipse, nous allons utiliser la méthode d’export mise à notre disposition.

Pour cela, faites un clique droit sur le projet, puis Export… > Java > JAR file.

Dans la fenêtre, décocher les cases correspondant à .classpath et .project.

Renseignez le chemin et le nom du fichier JAR à générer, puis cliquez sur le bouton Finish.

Nous disposons maintenant de l’archive contenant notre composant réutilisable.

Utilisation du composant

Pour tester notre composant, nous allons créer un projet Web dynamique dans Eclipse.

Puis, il faut déplacer l’archive que nous avons générée à l’étape précédente dans le répertoire lib du projet.

Il faut maintenant faire appel à notre composant.

Pour cela, il suffit de déclarer le namespace dans la page XHTML.

<?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>
  </h:head>
  <h:body>
    <f:view>
      <tag:hello nom="Benjamin" />
    </f:view>
  </h:body>
</html>

La déclaration se fait simplement via l’instruction xmlns:tag="http://java.sun.com/jsf/composite/tag.

Le tag ci-dessus (en fin d’URI) correspond à l’identifiant de notre librairie de composants (= le sous-répertoire contenant notre composant).

L’utilisation est identique à celle de la déclaration “classique” de composants.