Taglibs

publicité
Module de découverte
Développement web en
Java
Mathieu Chatelain
Taglibs
◦ Présentation
◦ Création de tags
Sommaire
Utilisées pour éviter le mélange java-html.
Encapsule/masque le code java dans des balises personnalisées.
Comparable aux java beans implémentant une interface
particulière.
Donc comme les tags JSP, syntaxe proche de XML.
Facile à utiliser dans la page JSP.
<prefixe:nomDuTag attribut1="valeur" attribut2="valeur" >
Corps du Tag
</prefixe:nomDuTag>
Présentation
Nécessite 2 éléments:
Une TLD (Tag Library Descriptor) pour effectuer le mapping
classe java-balise. Ce fichier est une fichier xml dont l’extension
est .tld
Une classe java
La classe java est appelée lors de l’exécution de la JSP appelante.
Chaque balise est associée à une classe qui va contenir les
traitements à exécuter lors de son utilisation.
Présentation
Fichier xml portant l’extension .tld .
Permet de faire l’association entre les balises JSP et les classes java.
Exemple:
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.2</jspversion>
<tag>
<name>hellotag</name>
<tag-class>com.web.MyTag</tag-class>
<description>Tag qui affiche Hello</description>
<attribute>
<name>nom</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
Le descripteur
Doit implémenter l’interface Tag, mais il est préférable d’hériter de
TagSupport qui implémente déjà Tag.
Surcharger les méthodes de la classe TagSupport.
Les méthodes surchargées exécuteront donc le traitement nécessaires, qui
auraient pû être écrit dans la JSP directement.
Séparation HTML-java pour les développeurs web qui ne connaissent pas
java.
La classe Java
2 solutions pour utiliser une librairie
En incluant le descripteur directement dans la JSP appelante
<%@ taglib uri="/WEB-INF/taglib.tld" prefix=“lePrefixe" %>
En incluant le descripteur dans le fichier web.xml
<taglib>
<taglib-uri>taglib-URI</taglib-uri>
<taglib-location>/WEB-INF/taglib.tld</taglib-location>
</taglib>
Et le mapping dans la JSP
<%@ taglib uri="taglib-URI" prefix="tag-prefix" %>
Utilisation
<tlib-version> : version de la bibliothèque (obligatoire).
<jsp-version> : version des spécifications JSP (obligatoire).
<short-name> : nom de la bibliothèque (obligatoire).
<description> : description de la bibliothèque (optionnelle).
<tag> : autant que de balises qui composent la bibliothèque.
Le descripteur
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>TagLibTest</short-name>
<description>Bibliothèque de taglibs</description>
<tag>
...
</tag>
<tag>
...
</tag>
</taglib>
Le descripteur - exemple
Définit une balise personnalisée.
<name> : nom du tag, il doit être unique dans la bibliothèque
(obligatoire).
<tag-class> : nom de la classe qui contient le handler du tag (obligatoire).
<body-content> : type du corps du tag (optionnelle).
◦
JSP : le corps du tag contient des tags JSP.
◦ tagdependent : l’interpretation du contenu du corps est faite par le tag.
◦ empty : le corps doit obligatoirement être vide.
<description> : description du tag (optionnelle).
<attribute> : décrit les attributs. Autant qu’il y a d’attributs.
La balise tag
<taglib>
…
<tag>
<name>hellotag</name>
<tag-class>com.package.TagClass</tag-class>
<description>Tag qui affiche bonjour</description>
<body-content>empty</body-content>
</tag>
…
</taglib>
La balise tag - exemple
Représente une propriété de la classe java (ne pas oublier les
setters/getters).
<name> : nom de l’attribut utilisé dans les JSP (obligatoire).
<required> : indique si l’attribut est requis (true/false ou yes/no).
<rtexprvalue> : indique si l’attribut peut-être le résultat d’un tag
expression. (<%=valeur%>)
<type> : indique le type Java de l’attribut (défaut : java.lang.String).
La balise attribute
<taglib>
…
<tag>
…
<attribute>
<name>nom</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
…
</taglib>
La balise attribute - exemple
Est un javabean.
Implémente javax.servlet.jsp.tagext.Tag, ou hérite de
javax.servlet.jsp.tagext.TagSupport(conseillé)
3 méthodes principales :
◦ doStartTag(): invoquée quand le tag est ouvert dans la JSP,
◦ doAfterBody(): invoqué quand le corps du tag a été traité ,
◦ doEndTag(): invoquée quand le tag est fermé dans la JSP.
Chaque méthode renvoie un entier, propriété de l’interface Tag.
◦ EVAL_BODY_AGAIN: retourné par doAfterBody()pour que le corps du tag soit réévalué.
◦ SKIP_BODY: retourné par doStartTag() pour ne pas traiter le corps du tag.
◦ EVAL_BODY_INCLUDE: retourné par doStartTag() pour traiter le corps du tag .
◦ SKIP_PAGE: retourné par doEndTag() pour ne pas traiter le reste de la page .
◦ EVAL_PAGE : retourné par doEndTag() et doAfterBody() pour traiter le reste de la
page .
On peut accéder au flux de sortie via l’objet pageContext:
pageContext.getOut.print("un texte");
La classe Java
Téléchargement