JSF 2.0: Création d'un simple composant classique
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:
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");
}
}
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:
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.
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>