JSF 2.0: Création d'un simple composant classique

Publié le par sglon

Nous sommes parti pour créer un composant qui renvoi <div>hello</div> dans une page Facelet xhtml.  Facelet est de moteur de rendu par défaut de JSF 2.0.

Nous avons besoin de:
  • une classe de composant, ce qui génère la sortie dans notre cas
  • un fichier de bibliothèque de balises qui décrit notre composant et ses attributs
  • une entrée dans le fichier web.xml (selon le conditionnement) pour permettre à  JSF de trouver la bibliothèque de balises.
Nous avons 2 options pour créer un composant JSF. La première est d'étendre à partir la classe UIComponentBase et de surcharger les méthodes  que l'on souhaite modifier. Cette classe offre une gamme de méthodes utiles dont vous avez besoin dans la plupart des cas et est destiné à être utilisé en tant que classe de base pour de nouveaux composants. En JSF 2, ceci est la classe à utiliser comme classe de base pour les composants. Si votre composant est très similaire à un composant existant, alors il serai mieux utiliser l'existant comme classe de base. Par exemple UIInput fournit déjà un certain nombre de méthodes pour la manipulation des entrées, la transformation et de validation. Si votre composant peut recevoir des données d''entrée alors vous pouvez utiliser cette classe. Tous les composants JSF 2 étendent de UIComponentBase. Dans notre cas, nous allons utiliser UIComponentBase car nous voulons juste renvoyer d'un simple div.

Jetez un oeil à la première classe, que je vais vous décrire.

package com.evasion.plugin.security.component;

import java.io.IOException;
import javax.faces.component.FacesComponent;
import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;

@FacesComponent(value = "com.evasion.plugin.security.component.Authorize")
public class Authorize extends UIComponentBase {

    @Override
    public String getFamily() {
        return "com.evasion";
    }

    @Override
    public void encodeBegin(FacesContext context) throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement("div", null);
        writer.write("hello");
        writer.endElement("div");
    }
}

@FacesComponent
Cette anntation définit que la classe "com.evasion.plugin.security.component.Authorize" est un composant et qui est mappé avec avec le type "com.evasion.plugin.security.component.Authorize". dans cet exemple j'utilise le même nom mais vous pouvez très bien en utiliser un différent. JSF scan le classpath de votre application à la recherche de composants. En plus, il va scanner tout les JAR, si le JAR contient au moins un fichier / META-INF/faces-config.xml vide.

Comme alternative à l'annotation introduit en JSF 2, vous pouvez utiliser une configuration XML. Si vous souhaitez utiliser le XML plutôt que les annotations, ajoutez l'entrée suivante dans votre faces-config.xml:

<component>
<component-type>com.evasion.plugin.security.component.Authorize</component-type>
<component-class>com.evasion.plugin.security.component.Authorize</component-class>
</component>
</faces-config>

Publié dans Informatique

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article