Création d’une Taglib custom utilisable dans EL

Depuis l’apparition des Taglibs (JSTL, Spring, …) et d’EL, il est déconseillé d’utiliser du Java directement dans les JSP.

En effet, les scriplets présentent de nombreux inconvénients, parmi lesquels l’absence de réutilisabilité, la difficulté de débuggage et de maintenance, la mise en place de tests assez hasardeuse, …

Mais alors que faire lorsqu’une fonctionnalité dont on a besoin dans une JSP n’est pas disponible dans EL ? On créé sa propre TagLib utilisable directement dans EL. C’est très simple et très rapide à mettre en place !

1. Création de la classe qui implémente la méthode souhaitée

1
2
3
4
5
6
7
package com.perso.test;

public class HelloTeller {
public static String sayHello(String name) {
return "Hello " + name;
}
}

Création du Tag Library Description correspondant

La Taglib se déclare dans un fichier .tld via un Tag Library Descriptor.
Je créé donc un fichier myTaglib.tld, que je place à la racine de /WEB-INF/ :

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0" >
<tlib-version>2.0</tlib-version>
<function>
<name>sayHello</name>
<function-class>com.perso.test.HelloTeller</function-class>
<function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
</function>
</taglib>

3. C’est tout !

Il ne reste qu’à déclarer la taglib dans ma JSP, et à utiliser ma méthode !

1
2
<%@ taglib prefix="h" uri="/WEB-INF/myTaglib.tld"%>
<c:out value="${h:sayHello('Baptiste')}" />

Résultat :

hello

Conclusion

J’ai récemment eu besoin d’ajouter des méthodes à EL. Je m’attendais à quelque chose de compliqué et lourd, et j’ai été surpris de voir à quel point c’est tout le contraire ! :-)

Dans les anciennes versions d’EL, il n’était pas possible d’appeler de méthodes sur les objets. Cette technique est alors une bonne solution !

VN:R_U [1.9.22_1171]
Rating: +3 (from 3 votes)
Share
Ce contenu a été publié dans Java. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire