Quelle version taglib JSTL utiliser ? Quel namespace utiliser ? Quelle dépendance? Quelle galeure!

Ce billet indique comment résoudre les problèmes liés au fonctionnement du taglib JSTL dans une page JSP.
Il y a encore beaucoup de projets qui utilisent JSP/JSTL pour la présentation des applications web (je sais qu'il y a jsf, gwt, ....).

C'est une galère de suivre un tutorial et qu'à la fin, le bout de code jsp :

<c:out value="${myVar}"/>

n'affiche rien et aucun message d'erreur n'est signalé (ni sur tomcat ni sur jetty).

Certains (j'en fais partie) ont perdu du temps à résoudre ce problème!

D'autres ont cherché sur le net en parcourant des centaines de pages à la recherche d'une réponse claire. Hélas!

Voici donc la procédure à suivre scrupuleusement.

LES PRE-REQUIS

Commençons par bien regarder le tableau suivant qui résume la correspondance entre les versions des servlets et JSTL.
JSTL_difficultes.PNG

Il est donc important de faire le bon choix de la version JSTL en fonction de la servlet utilisée.

LE PROBLEME

Le problème est tout simple à décrire. Dans une page jsp, le bout de code jsp suivant :

<c:out value="${myVar}"/>

n'affiche rien! Aucune exception n'est tracée ni par l'application web ni par le conteneur servlet de tomcat/jetty.

De plus, quel namespace doit-on inclure dans la page jsp?

Celui-ci:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

Ou celui-là:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Enfin, quelle dépendance maven doit-on ajouter ?

Et quelle dépendance doit-on exclure?

Utiliser jstl-xx.jar ou jstl-impl de glassfish?

LA SOLUTION

La solution repose sur trois actes:

A) Ecrire correctement le web.xml avec le bon entête (header) comme suit:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

B) S'assurer dans la page jsp (ou le fichier include.jsp) que l'entête inclut correctement le namespace :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Observer que c'est http://java.sun.com/jsp/jstl/ avec la présence de jsp.

C) Ajouter la dépendance maven suivante dans le pom.xml:

<dependency>
     <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

Ces trois étapes sont à adapter en fonction du tableau donné en pré-requis.

@Enjoy,

Un commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.