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.
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,
cnc-machining.us
You can buy it here:…