Cours - Taglibs
Transcription
Cours - Taglibs
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