Présentation de la Java Standard Tag Library (JSTL)
Date de publication : 09/02/2005 , Date de mise à jour : 18/02/2007
Par
F. Martini (adiGuba) (mes autres tutoriels)
La JSTL est une implémentation de Sun qui décrit plusieurs actions basiques
pour les applications web J2EE. Elle propose ainsi un ensemble de librairies
de tags pour le développement de pages JSP.
Ce tutoriel décrit les différentes librairies de la JSTL.
Remerciement
Présentation
1.1. Objectifs de la JSTL
1.2. Documentation
1.3. Les versions
1.4. Configuration de la JSTL
2. <c:/> : Librairie de base
2.1. Gestion des variables de scope
<c:out/> : Afficher une expression
<c:set/> : Définir une variable de scope ou une propriété
<c:remove/> : Supprimer une variable de scope
<c:catch/> : Intercepter les exceptions
2.2. Actions conditionnels
<c:if/> : Traitement conditionnel
<c:choose/> : Traitement conditionnel exclusif
<c:when/> : Un cas du traitement conditionnel
<c:otherwise/> : Traitement par défaut
2.3. Itérations
2.3.1. Attributs standards des boucles
<c:forEach/> : Itérer sur une collection
<c:forTokens/> : Itérer sur des éléments d'une String
2.4. Les URLs
<c:param/> : Ajouter un paramètre à une URL
<c:url/> : Créer une URL
<c:redirect/> : Redirection
<c:import/> : Importer des ressources
3. <fmt:/> : Librairie de Formatage
3.1. Internationalisation (i18n)
3.1.1. Configuration
3.1.1.1. Locale
3.1.1.2. Locale par défaut
3.1.1.3. Contexte de localization
<fmt:setLocale/> : Définir la Locale
<fmt:setBundle/> : Définir le ResourceBundle
<fmt:bundle/> : Définir un ResourceBundle partiel
<fmt:message/> : Afficher des messages
<fmt:param/> : Ajouter un paramètre au message
<fmt:requestEncoding/> : Encodage du client
3.2. Formatage
3.2.1. Configuration
3.2.1.1. Fuseau horaire (TimeZone)
<fmt:setTimeZone/> : Définir le fuseau horaire
<fmt:timeZone/> : Utiliser un Timezone
<fmt:parseDate/> : Analyser une date
<fmt:formatDate/> : Formater une date
<fmt:parseNumber/> : Analyser un nombre
<fmt:formatNumber/> : Formater un nombre
4. <sql:/> : Librairie SQL
4.1. Configuration
4.1.1. DataSource
4.1.2. Nombre de ligne maximum
<sql:setDataSource/> : Définir le Datasource
<sql:query/> : Exécuter une requête
<sql:update/> : Exécuter une commande SQL
<sql:transaction/> : Exécuter une commande SQL
<sql:param/> : Définir un paramètre de la requête
<sql:dateParam/> : Définir une date en paramètre de la requête
5. <x:/> : Librairie XML
5.1. XPath
5.2. Actions XML de base
<x:parse/> : Analyser un XML
<x:out/> : Evaluer une expression
<x:set/> : Créer une variable de scope
5.3. Actions de contrôle XML
<x:if/> : Action conditionnelle
<x:choose/> : Traitement conditionnel exclusif
<x:when/> : Un cas du traitement conditionnel
<x:otherwise/> : Traitement par défaut
<x:forEach/> : Itérer sur le fichier XML
5.4. Transformation XSLT
<x:transform/> : Appliquer un XSLT
<x:param/> : Ajouter un paramètre XSLT
6. ${fn:} : Librairie de fonctions EL
${fn:contains()}
${fn:containsIgnoreCase()}
${fn:endsWith()}
${fn:escapeXml()}
${fn:indexOf()}
${fn:join()}
${fn:length()}
${fn:replace()}
${fn:split()}
${fn:startsWith()}
${fn:substring()}
${fn:substringAfter()}
${fn:substringBefore()}
${fn:toLowerCase()}
${fn:toUpperCase()}
${fn:trim()}
7. Créer une taglib compatible avec la JSTL
7.1. Accès à la configuration
7.2. Tags conditionnels
7.3. Tags itératifs
7.4. Accès aux données localisées
Conclusion
Remerciement
Je tiens à remercier
Ukyuu
pour avoir pris le temps de relire ce tutoriel, ainsi que les multiples retours que j'ai eu
de la part des lecteurs (
nicolas c,
mimil77210,
Kimael, et d'autres que j'oublie peut-être : merci à tous).
Présentation
De nombreux frameworks facilitent le développement d'application
J2EE (Struts, Spring, etc...).
La plupart de ces frameworks proposent également des librairies
de tags JSP facilitant la création de pages JSP. Il en résulte
une multitude de librairies différentes pour des fonctionnalités
similaires. La JSTL propose une librairie standard pour la
plupart des fonctionnalités de base d'une application J2EE.
1.1. Objectifs de la JSTL
Le but de la JSTL est de simplifier le travail des auteurs
de page JSP, c'est à dire la personne responsable de la couche
présentation d'une application web J2EE.
En effet, un web designer peut avoir des problèmes pour la conception
de pages JSP du fait qu'il est confronté à un langage de script
complexe qu'il ne maîtrise pas forcément.
La JSTL permet de développer des pages JSP en utilisant
des balises XML, donc avec une syntaxe proche des langages
utilisés par les web designers, et leur permet donc de concevoir
des pages dynamiques complexes sans connaissances du langage Java.
Sun a donc proposé une spécification pour une librairie de tags
standard : la Java Standard Tag Library (JSTL).
C'est à dire qu'il spécifie les bases de cette librairie, mais qu'il
laisse l'implémentation libre (de la même manière que pour les
serveurs J2EE qui sont des implémentations de la spécification J2EE).
1.2. Documentation
1.3. Les versions
Actuellement, deux versions de la JSTL sont disponibles, avec
les restrictions suivantes :
- La JSTL 1.0 nécessite au minimum un conteneur JSP 1.2 (J2EE 1.3).
- La JSTL 1.1 nécessite au minimum un conteneur JSP 2.0 (J2EE 1.4).
La JSTL se base sur l'utilisation des Expressions Languages
en remplacement des scriptlets Java. Toutefois, ce mécanisme
n'est disponible qu'avec le conteneur JSP 2.0. Ainsi, la
JSTL 1.0 propose deux implémentations :
L'implémentation de base intègre donc un interpréteur
d'Expressions Languages afin de pouvoir utiliser
toutes les possibilités des Expressions Languages
dans un conteneur JSP 1.1 ou 1.2 :
| Librairie |
URI |
Préfixe |
| core |
http://java.sun.com/jstl/core |
c |
| Format |
http://java.sun.com/jstl/fmt |
fmt |
| XML |
http://java.sun.com/jstl/xml |
x |
| SQL |
http://java.sun.com/jstl/sql |
sql |
 |
Ces URI ne doivent pas être utilisées dans une application
J2EE 1.4 afin de ne pas rentrer en conflit avec
l'interpréteur d'EL intégré dans les JSP 2.0.
De plus cela interdit l'utilisation de scriptlets en tant
que valeur des attributs des tags (seules les chaines de caractères
sont autorisées) :
|
La seconde version de la JSTL 1.0 n'intègre pas d'interpréteur
d'Expressions Languages. Cette implémentation se distingue par
l'ajout des caractères "_rt" à la fin de l'URI et du préfixe,
qui indique que la gestion des EL est éventuellement laissée
au moteur JSP ("runtime") :
| Librairie |
URI |
Préfixe |
| core |
http://java.sun.com/jstl/core_rt |
c_rt |
| Format |
http://java.sun.com/jstl/fmt_rt |
fmt_rt |
| XML |
http://java.sun.com/jstl/xml_rt |
x_rt |
| SQL |
http://java.sun.com/jstl/sql_rt |
sql_rt |
 |
Attention, si ces URIs sont utilisées dans des JSP 1.1
ou 1.2, les Expressions Languages ne seront pas interprétés.
|
La JSTL 1.1 n'apporte pas de changement majeur dans
les librairies de tags, mis à part l'ajout d'une nouvelle
librairie de fonctions EL.
De plus, comme elle se base sur les JSP 2.0 qui intègre un moteur
d'Expressions Languages, elle
ne définit donc qu'une seule implémentation avec les URIs suivantes :
| Librairie |
URI |
Préfixe |
| core |
http://java.sun.com/jsp/jstl/core |
c |
| Format |
http://java.sun.com/jsp/jstl/fmt |
fmt |
| XML |
http://java.sun.com/jsp/jstl/xml |
x |
| SQL |
http://java.sun.com/jsp/jstl/sql |
sql |
| Fonctions |
http://java.sun.com/jsp/jstl/functions |
fn |
 |
Afin de les distinguer des URIs de la JSTL 1.0, la
chaîne "/jsp" a été ajoutée afin d'indiquer que cette
version se base sur le conteneur JSP pour interpréter les
Expressions Languages.
|
Ce tutoriel est basé sur la JSTL 1.1. Toutefois, mis à part
la gestion des Expressions Languages et la librairie de
fonctions, les différences entre les deux versions sont minimes...
1.4. Configuration de la JSTL
Certaines librairies de la JSTL peuvent nécessiter une
configuration propre à une application via le fichier web.xml
en utilisant les init-param. Ainsi, pour exemple pour définir
la source de donnée à utiliser par défaut, il faut renseigner
le paramètre javax.servlet.jsp.jstl.sql.dataSource :
| Configuration du web.xml |
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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-app_2_4.xsd"
version="2.4">
<context-param>
<param-name>javax.servlet.jsp.jstl.sql.dataSource</param-name>
<param-value>jdbc/data</param-value>
</context-param>
...
</web-app>
|
La classe javax.servlet.jsp.jstl.core.Config comporte
la liste des différents paramètres possibles. Chacun de ces
paramètres sont détaillés dans la section Configuration
de chaque librairie de la librairie.
La valeur de ces paramètres peut être modifiée dynamiquement
via la classe Config ou via des tags spécifiques décrits
dans la librairie correspondante. La nouvelle valeur est alors
stockées dans un des scopes de l'application, avec les influences
suivantes :
| Scope |
Description |
| page |
La nouvelle valeur n'affecte que la page JSP courante. |
| request |
La nouvelle valeur affecte toute la requête courante (pages JSP forwardées/incluses compris). |
| session |
La nouvelle valeur affecte toute la session de l'utilisateur. |
| application |
La nouvelle valeur affecte tous les utilisateurs. |
Lorsqu'une valeur de configuration est nécessaire, elle est
d'abord recherchée dans les différents scopes (dans l'ordre
naturel : page, request, session puis
application). Si la valeur n'existe dans aucun des scopes,
la valeur définit dans le web.xml est utilisée, ou une valeur
par défaut le cas échéant.
2. <c:/> : Librairie de base
Cette section et ses sous sections définissent les différentes
actions de la librairie "code" de la JSTL. C'est à dire la
librairie qui contient les actions de base d'une application web.
| Déclaration de la librairie 'core' : |
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
|
2.1. Gestion des variables de scope
Cette section comporte les actions de base pour la gestion
des variables de scope d'une application web :
- L'affichage de variable
- La création/modification/suppression de variable de scope
- La gestion des exceptions
<c:out/> : Afficher une expression
Evalue une expression et l'affiche dans la page JSP.
| Attribut |
Req. |
Type |
Description |
| value |
oui |
Object |
L'expression qui sera évaluée et affichée.
Si le type réel implémente java.io.Reader,
alors c'est son contenu qui sera affiché. |
| default |
|
Object |
Valeur à afficher si l'expression value est null (défaut : ""). |
| escapeXml |
|
booleen |
Détermine si les caractères
<, >, &, ', "
doivent être remplacés par leurs codes respectifs :
<, >, &, ', "
(défaut : true). |
Le Corps du tag peut être utilisé
à la place de l'attribut default.
| Exemple |
<c:out value="${header['user-agent']}" default="Inconnu"/>
<c:out value="${header['user-agent']}">
Inconnu
</c:out>
|
 |
Le conteneur JSP 2.0 gère lui-même les EL, ainsi
le code <c:out value="${expression}" escapeXml="false"/> est
équivalent à ${expression}.
|
<c:set/> : Définir une variable de scope ou une propriété
Permet de définir une nouvelle variable de scope, ou de changer
la valeur d'une propriété d'un beans.
| Attribut |
Req. |
Type |
Description |
| value |
|
Object |
L'expression à évaluer. |
| var |
|
String |
Nom de l'attribut qui contiendra l'expression dans le scope. |
| scope |
|
String |
Nom du scope qui contiendra l'attribut var
(page, request, session ou application) (défaut : page).
|
| target |
|
Object |
L'objet dont la propriété définit par property
sera modifiée. Il doit correspondre soit à un bean
avec la méthode mutateur correspondante (setProperty)),
soit à un objet de type java.util.Map.
|
| property |
|
String |
Nom de la propriété qui sera modifiée. |
Le Corps du tag peut être utilisé
à la place de l'attribut value.
Exception :
Une exception est propagé lorsque l'attribut target
ne correspond ni à une Map, ni à un bean
possédant une propriété "property".
| Exemple |
<c:set scope="session" var="varName" value="${expression}" />
<c:set target="${session['varName']" property="name" value="new value"/>
<c:set target="${session['varName']" property="name">
Nouvelle valeur de la propriété "name"
</c:set>
|
 |
Si l'attribut value est null, cela correspond
à supprimer la variable ou la propriété d'une Map,
ou à passer à null la propriété du bean.
|
<c:remove/> : Supprimer une variable de scope
Supprime la variable de scope indiqué.
| Attribut |
Req. |
Type |
Description |
| var |
oui |
String |
Nom de la variable de scope à supprimer. |
| scope |
|
String |
Nom du scope qui contiendra l'attribut var
(page, request, session ou application) (défaut : page).
|
Corps du tag : Aucun.
| Exemple |
<c:remove var="varName" scope="session"/>
|
<c:catch/> : Intercepter les exceptions
Intercepte les exceptions qui peuvent être lancées par son corps
| Attribut |
Req. |
Type |
Description |
| var |
|
String |
Nom de la variable dans le scope page
qui contiendra l'exception interceptée. |
Corps du tag : Le code JSP dont les exceptions seront
interceptées...
| Exemple |
<c:catch>
<c:set target="beans" property="prop" value="1"/>
</c:catch>
<c:catch var="varName">
<c:set target="beans" property="prop" value="1"/>
</c:cath>
|
 |
Si var n'est pas spécifié, les exceptions
interceptées ne seront pas sauvegardées.
Si var est spécifié et qu'aucune exception n'est lancée,
alors la variable de page "var" sera supprimée.
|
2.2. Actions conditionnels
Cette section comporte les actions permettant d'effectuer les
tests conditionnels de la même manière que les mots-clef
if ou switch du langage Java.
<c:if/> : Traitement conditionnel
Permet d'effectuer un traitement conditionnel de la même
manière que le mot-clef if du langage Java.
| Attribut |
Req. |
Type |
Description |
| test |
oui |
booleen |
La condition de test qui déterminera si le corps devra être evalué ou non. |
| var |
|
String |
Le nom d'une variable de scope de type Boolean
qui contiendra le résultat du test. |
| scope |
|
String |
Nom du scope qui contiendra l'attribut var
(page, request, session ou application) (défaut : page).
|
Corps du tag : Le code qui sera interprété selon le résultat
de la condition.
| Exemple |
<c:if test="${empty param['page']}">
Le paramètre page est absent !
</c:if>
|
<c:choose/> : Traitement conditionnel exclusif
Permet d'effectuer un traitement conditionnel de la même
manière que le mot-clef switch du langage Java, ou
qu'une série de if/else. C'est à dire que sur
plusieurs possibilités, une seule sera évaluée.
L'action <c:choose/> n'accepte aucun attribut, et
le corps du tag ne peut comporter qu'un ou plusieurs
tags <c:when/> et zéro ou un tag <c:otherwise/>.
L'action <c:choose/> exécutera le corps du premier
tag <c:when/> dont la condition de test est évaluée
à true. Si aucune de ces conditions n'est vérifiée,
il exécutera le corps de la balise <c:otherwise/>
si elle est présente.
Consulter les informations sur les balise <c:when/>
et <c:otherwise/> pour plus de détail.
<c:when/> : Un cas du traitement conditionnel
Définit une des options de l'action <c:choose/>.
La balise parent doit obligatoirement être <c:choose/>.
Le premier tag de la balise <c:choose/> dont la
condition est vérifiée sera le seul à évaluer son corps.
 |
Le tag <c:when/> a le même fonctionnement que
le mot-clef case d'un bloc switch en Java.
|
| Attribut |
Req. |
Type |
Description |
| test |
oui |
boolean |
La condition de test qui déterminera si le corps devra être évalué ou non
(on utilise généralement une Expressions Languages). |
Corps du tag : Le code qui sera interprété selon le résultat
de la condition.
| Exemple |
<c:choose>
<c:when test="${value==1}"> value vaut 1 (Un) </c:when>
<c:when test="${value==2}"> value vaut 2 (Deux) </c:when>
<c:when test="${value==3}"> value vaut 3 (Trois) </c:when>
</c:choose>
|
<c:otherwise/> : Traitement par défaut
Le traitement à effectuer si aucun tag <c:when/>
n'a été évalué.
La balise parent doit obligatoirement être <c:choose/>
et après la dernière balise <c:when/>.
Elle n'accepte aucun attribut et n'évaluera son corps que
si aucune des balises <c:when/> n'est vérifiée.
 |
Le tag <c:otherwise/> a le même fonctionnement que
le mot-clef default d'un bloc switch en Java.
|
| Exemple |
<c:choose>
<c:when test="${value==1}"> value vaut 1 (Un) </c:when>
<c:when test="${value==2}"> value vaut 2 (Deux) </c:when>
<c:when test="${value==3}"> value vaut 3 (Trois) </c:when>
<c:otherwise>
value vaut ${value} (?)
</c:otherwise>
</c:choose>
|
2.3. Itérations
Cette section comporte les actions permettant d'effectuer des
boucles de la même manière que les mots-clef
for ou while du langage Java.
2.3.1. Attributs standards des boucles
Les tags d'itérations de la JSTL sont basés
sur la classe javax.servlet.jsp.jstl.core.LoopTagSupport.
Ainsi, les tags de cette section possèdent en commun les
attributs suivants :
| Attribut |
Req. |
Type |
Description |
| var |
|
String |
Nom d'une variable de scope qui comportera
l'élément courant de l'itération (visible à l'intérieur
du corps du tag seulement).
|
| varStatus |
|
String |
Nom d'une variable de scope qui comportera des
informations sur le status de l'itération (visible à l'intérieur
du corps du tag seulement).
|
| begin |
|
int |
Spécifie l'index de départ de l'itération. |
| end |
|
int |
Spécifie l'index de fin de l'itération. |
| step |
|
int |
L'itération s'effectuera sur les N éléments de la collection.
N correspondant à la valeur de step. |
L'attribut varStatus permet d'utiliser un objet de type
LoopTagStatus qui possèdent les propriétés suivantes :
| Nom |
Type |
Description |
| begin |
Integer |
Valeur de l'attribut begin du tag (null si absent). |
| end |
Integer |
Valeur de l'attribut end du tag (null si absent). |
| step |
Integer |
Valeur de l'attribut step du tag (null si absent). |
| count |
int |
Comptabilise le nombre de tour de l'itération. |
| current |
Object |
L'élément courant de l'itération. |
| index |
int |
L'index de l'élément courant dans la collection. |
| first |
booleen |
Indique que la boucle courante est la première de l'itération. |
| last |
booleen |
Indique que la boucle courante est la dernière de l'itération. |
 |
Attention : count et index ne sont pas forcément
identique...
|
 |
Toutes ces fonctionnalités sont implémentées par la classe
abstraite javax.servlet.jsp.jstl.core.LoopTagSupport.
Elle peut donc être utilisée afin de créer ses propres tags
itératifs...
|
<c:forEach/> : Itérer sur une collection
Permet d'effectuer simplement des itérations sur plusieurs
types de collection de données.
| Attribut |
Req. |
Type |
Description |
| items |
|
Object |
La collection d'éléments qui contient les éléments de l'itération
(Voir la "Liste des types supportés"). |
|
Ainsi que les attributs standards des boucles
(Voir la liste des attributs standards).
|
Corps du tag : Le code qui sera évalué à chaque itération
sur la collection.
L'attribut items accepte les éléments suivant comme
collection :
- Les tableaux d'objets ou de types primaires (ils seront alors englobés dans la classe wrapper correspondante).
- Une implémentation de java.util.Collection en utilisant la méthode iterator().
- Une implémentation de java.util.Iterator.
- Une implémentation de java.util.Enumeration.
- Une implémentation de java.util.Map, en utilisant les méthodes entrySet().iterator().
- [Deprecated] Une String dont les différents éléments sont séparés par des virgules (mais il est préférable d'utiliser <c:forTokens/> à la place).
- Une valeur null sera considérée comme une collection vide (pas d'itération).
- Si l'attribut items est absent, les attributs begin et end permettent d'effectuer une itération entre deux nombres entiers.
 |
L'utilisation d'une String dans le tag <c:forEach/>
est dépréciée et ne devrait plus être utilisée. Cette fonctionnalité
reste présente pour des raisons de compatibilité avec la JSTL 1.0,
mais il est fortement conseillé d'utiliser le tag <c:forTokens/>
à la place...
|
| Exemple |
<c:forEach var="entry" items="${requestScope['myCollection']}" >
${entry}<br/>
</c:forEach>
<c:forEach var="entry" items="${requestScope['myCollection']}"
begin="0" end="9">
${entry}<br/>
</c:forEach>
<c:forEach var="entry" begin="1" end="10">
${entry},
</c:forEach>
|
 |
Lors de l'itération sur une Map, l'élément courant
de chaque itération est du type java.util.Map.Entry,
et possède donc les propriétés suivantes :
|
| Nom |
Type |
Description |
| key |
Object |
La clef utilisée pour stocker l'élément dans la Map. |
| value |
Object |
La valeur correspondante à la clef. |
| Exemple |
<c:forEach var="entry" items="${param}" >
Le paramètre "${entry.key}" vaut "${entry.value}".<br/>
</c:forEach>
|
<c:forTokens/> : Itérer sur des éléments d'une String
Permet de découper des chaînes de caractères selon un ou
plusieurs délimiteurs. Chaque marqueur ainsi obtenu sera
traité dans une boucle de l'itération.
| Attribut |
Req. |
Type |
Description |
| items |
oui |
String |
La chaîne de caractère qui sera découpé. |
| delims |
oui |
String |
La liste des caractères qui serviront de délimiteurs. |
|
Ainsi que les attributs standard des boucles
(Voir la liste des attributs standards).
|
Corps du tag : Le code qui sera évalué pour chaque marqueur de la chaîne.
| Exemple |
<c:forTokens var="p" items="mot1;mot2;mot3;mot4" delims=";">
${p}<br/>
</c:forTokens>
|
2.4. Les URLs
Cette section décrit quelques tags utiles pour la gestion
des URLs :
- Création d'URLs complexes
- Redirection vers une URLs
- Import de ressources locales ou distantes
<c:param/> : Ajouter un paramètre à une URL
Permet d'ajouter simplement un paramètre à une URL
représentée par le tag parent.
Cette balise doit avoir comme balise parent une
balise <c:url/>, <c:import/> ou
<c:redirect/> (mais pas forcement comme parent direct).
| Attribut |
Req. |
Type |
Description |
| name |
oui |
String |
Le nom du paramètre de l'URL. |
| value |
|
String |
La valeur du paramètre de l'URL. |
Le Corps du tag peut être utilisé à la place de
l'attribut value afin de définir la valeur du
paramètre.
 |
Le nom et la valeur du paramètre de l'URL est automatiquement
encodé afin de respecter le format des URLs (les 'espaces' sont
remplacés par des '+',...).
|
| Exemple |
<c:url value="/mapage.jsp?paramName=paramValue"/>
<c:url value="/mapage.jsp">
<c:param name="paramName" value="paramValue"/>
</c:url><br/>
|
<c:url/> : Créer une URL
Permet de créer des URLs absolues, relatives au contexte,
ou relatives à un autre contexte.
| Attribut |
Req. |
Type |
Description |
| value |
oui |
String |
L'URL à traiter (absolue, relative à l'application ou à la page courante). |
| context |
|
String |
Spécifie le chemin du contexte de l'application locale à utiliser (débute obligatoirement par le caractère '/').
Par défaut, il prend la valeur du contexte de l'application courante tel qu'il est renvoyé par request.getContextPath(). |
| var |
|
String |
Le nom de la variable de scope qui contiendra la String représentant l'URL.
Si absent, l'URL sera écrite dans la page JSP. |
| scope |
|
String |
Nom du scope qui contiendra l'attribut var
(page, request, session ou application) (défaut : page).
|
Le
corps du tag peut contenir n'importe quel code JSP.
Tous les tags
<c:param/> pourront modifier l'URL.
Il s'agit du même mécanisme que
le corps du tag <c:url/>.
 |
Contrairement au tag <c:choose/>
qui n'accepte que les tags
<c:when/> et
<c:otherwise/>,
le corps du tag <c:url/> accepte tout type de code JSP.
Toutefois, le corps du tag est bufférisé et tout ce qui est écrit
à l'intérieur n'est pas reporté sur la page JSP mais ignoré.
Cela permet d'utiliser des balises itérations ou conditionnels
pour créer la liste des paramètres :
|
| Exemple |
<c:url value="/index.jsp" var="variableURL">
<c:forEach items="${parameterMap}" var="entry">
<c:param name="${entry.key}" value="${entry.value}"/>
</c:forEach>
</c:url>
<a href="${variableURL}">Mon Lien</a>
|
Les URLs sont réécrite de la manière suivante :
- Le chemin du contexte est ajouté aux URLs relatives à une application locale (URLs qui commencent par '/').
- Les URLs relatives à l'application courante sont encodées afin de rajouter le jsessionid si nécessaire (cookies absent,...).
- Les paramètres ajoutés avec les balises <c:param/> sont ajoutés à l'URL.
| Exemple |
<c:url value="/page.jsp?param=value">
<c:url var="url" scope="page" value="/page.jsp?param=value">
<c:param name="id" value="1"/>
</c:url>
|
 |
Afin de pouvoir être utilisées dans d'autres tags (notamment
<jsp:include/>), les URLs |