Balises JSTL
Introduction
Les balises JSTL (Jakarta Standard Tag Library) sont un ensemble de balises fonctionnelles provenant de différentes librairies qui nous permettent de faciliter l'insertion de code Java sur les pages JSP.
Celles que nous utiliserons le plus fréquemment probviennent des librairies suivantes:
- Core : permet des manipulations de base, création d’url, de boucles, de contidions.
- Function : permet l’utilisation de certaines fonctions prédéfinies (ex : toUpperCase(), substring())
- Formatting : permet l’utilisation de différentes fonctions de formatage pour des nombres ou dates par exemple
Configuration requise
Pour utiliser les différentes balises JSTL, il faudra tout d'abord ajouter la dépendence suivante dans le fichier pom.xml de l'application.
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jstl</artifactId>
<version>11.0.0</version>
</dependency>
Ensuite, sur les pages JSP qui utilisent ces balises, il faudra ajouter une balise de directive spécifiant les différentes librairies à importer. Chaque librairie a un préfixe et une URI unique à ajouter.
| Catégorie | Préfixe | URI |
|---|---|---|
| Core | c | http://java.sun.com/jsp/jstl/core |
| Function | fn | http://java.sun.com/jsp/jstl/functions |
| Formatting | fmt | http://java.sun.com/jsp/jstl/fmt |
Pour ajouter une de ces librairies à une page JSP la directive prendra la forme suivante
<%@ taglib prefix="{préfixe}" uri="{URI}" %>
Les balises core
Directive complète à ajouter
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Quelques balises fréquentes:
| Balise | Description |
|---|---|
<c:set> |
Crée une variable à réutiliser sur la page |
<c:out value="${}"> |
Permet d'écrire le contenu d'une variable de façon sécuritaire dans la page |
<c:if test="${}"> |
Balise conditionnelle, son contenu sera rendu si le test évalue à true |
<c:choose> <c:when test=${}>, <c:otherwise> |
Trois balises à utiliser ensemble, elles correspondent à l’évaluation d’une instruction Switch. |
<c :forEach var="" items="${}"> |
Permet une exécution en boucle. Le contenu sera rendu pour chacune des variables dans la collection items. |
<c:url value=""> |
Permet de créer une URL rapidement et qui s’assure d’ajouter le bon contexte d’application. On peut aussi en faire une variable en utilisant l’attribut var="" dans la balise. |
Quelques remarques sur les balises core
- La balise
otherwisene peut pas être utilisée comme la clauseelsed'une baliseif. Elle doit absoluement faire partie d'un ensemblechoose
<c:choose>
<c:when test=${condition1}> </c:when>
<c:when test=${condition2}> </c:when>
<c:when test=${condition3}> </c:when>
<c:otherwise> {cas par défaut} </c:otherwise>
</c:choose>
La balise url est très utile car elle nous permet d'éviter d'avoir a spécifier le contexte de l'application dans les URL qu'on voudra créer. Ceci permet une meilleure compatibilité entre différents environnements (d.veloppement vs. production). Elle nous permet également de récupérer nos fichiers de CSS et scripts plus facilement.
Les balises formatting
Directive complète à ajouter
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
Quelques balises fréquentes:
| Balise | Description |
|---|---|
<fmt:formatNumber> |
Permet de convertir un nombre à un format donné, pratique pour les formats monétaires pax exemple. |
<fmt:formatDate"> |
Permet le formatage d’une date selon différents paramètres |
Pour afficher une valeur numérique avec une précision ou un format spécifique.
<f:formatNumber value="…" [pattern="…" | type="…"] >
où
- pattern : le format d'affichage personnalisé
- value : l'expression EL à afficher
- type : le format d'affichage (currency, number, percent,…)
Pour afficher une date avec un format spécifique
<fmt:formatDate value= [pattern= | type= ]>
Type peut prendre la valeur "time", "date" ou "both" (pour datetime). On peut également spécifier le pattern comme "yyyy-MM-dd" au lieu de donner un type si on veut on format spécifique.
Les fonctions JSTL
Directive complète à ajouter
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Les fonctions JSTL ne sont pas exprimés sous forme de balise, mais plutôt comme une partie d'une expression EL Java.
Quelques exemples de fonctions
| Fonction | Utilisation |
|---|---|
| fn:contains() | Vérifie si une chaîne de caractère contient la sous chaîne recherchée |
| fn:join() | Fait la jointure de différents éléments d'un tableau en un chaîne de caractères |
| fn:split() | Divise une chaîne en un tableau de sous-chaînes. |
| fn:toLowerCase() | Transforme une chaîne de caractères en minuscules |
| fn:toUpperCase() | Transforme une chaîne de caractères en majuscules |
Exemple d'utilisation:
<td> ${fn:toUpperCase(produit.description)} </td>
Notez comment le préfixe fn et la fonction à utiliser font partie de l'expression et non pas d'une balise.