Remarque :
Avant de pouvoir utiliser ces actions, la JSP doit importer l’URI de la bibliothèque
et choisir un préfixe, soit en utilisant une directive JSP avec le système de
marqueurs de JSP, soit en utilisant une syntaxe XML :
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
// ou
<jsp:root xmlns:jsp=”http://java.sun.com/JSP/Page”
xmlns:c="http://java.sun.com/jstl/core" version=”1.2”>
Avec cette déclaration, vous pouvez ensuite utiliser toutes les actions de la
biblio- thèque des marqueurs fondamentaux en utilisant le préfixe c :
<c:set var=”upperLimit” value=”20”/>
Ce code initialise la variable upperLimit avec la valeur 20.
1
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
1. Actions fondamentales :
Les actions fondamentales, énumérées ci-dessous, fournissent des marqueurs pour
manipuler des variables, traiter les erreurs, effectuer des tests et exécuter des boucles
et des itérations.
Action Description
<c:out> Évalue une expression et affiche son résultat.
<c:set> Initialise la valeur d’un objet.
<c:remove> Supprime une variable.
<c:catch> Capture une exception java.lang.Throwable lancée par
l’une de ses actions imbriquées.
<c:if> Teste si une expression est vraie.
<c:choose> Fournit plusieurs alternatives exclusives.
<c:when> Représente une alternative dans une action <c:choose>.
<c:otherwise> Représente la dernière alternative d’une action <c:choose>.
<c:forEach> Répète son corps pour chaque élément d’une collection ou un
nombre fixé de fois.
<c:forTokens> Itère sur une liste de tokens (lexèmes) séparés par des virgules.
<c:import> Importe une ressource.
<c:url> Encode une URL.
<c:param> Ajoute des paramètres de requête â une URL.
<c:redirect> Redirige vers une URL précise.
Exemple :
Une JSP qui boucle sur les nombres de 3 â 15 en affichant, pour chacun d’eux, s’il est
pair ou impair.
<jsp:root xmlns:jsp=”http://java.sun.com/JSP/Page”
xmlns:c="http://java.sun.com/jstl/core"
version=”1.2”>
<html>
<body>
<c:set var=”upperLimit” value=”20”/>
<c:forEach var=”i” begin=”3” end=”${upperLimit – 5}”>
<c:choose>
<c:when test=”${i%2 == 0}”>
<c:out value=”${i} is even”/><br/>
</c:when>
<c:otherwise>
<c:out value=”${i} is odd”/><br/>
</c:otherwise>
</c:choose>
</c:forEach>
</body>
</html> 2
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
Pour utiliser la bibliothèque des marqueurs fondamentaux, la page doit importer son
URI avec un préfixe. Puis elle affecte la valeur 20 à la variable upperLimit à
l’aide du marqueur <c:set> et itère sur tous les nombres compris entre 3 et 15 (nous
avons volontairement ajouté une expression arithmétique ${upperLimit – 5}).
La valeur de l’indice (la variable i) est testée à chaque tour de boucle pour savoir
si elle est paire ou impaire (<c:when test=”${i%2 == 0}”>).
Le marqueur <c:out> affche ensuite la valeur de l’indice, accompagnée du texte
“est pair“ ou “est impair“.
Vous pouvez remarquer que tout le traitement s’effectue grâce aux marqueurs, que
cette page est conforme â XML et qu’elle peut être comprise par les développeurs
qui ne connaissent pas Java.
2. Actions de formatage :
Les actions de formatage, énumérées ci-dessous, permettent de formater des dates,
des nombres, des valeurs monétaires et des pourcentages. Vous pouvez aussi obtenir
ou modifier les locales (variables de langue) et les zones horaires et obtenir
l’encodage de la page web.
Action Description
<fmt:message> Tnternationalise une JSP en extrayant un
message en fonction de la langue.
<fmt:param> Fournit un paramètre â <fmt:message>.
<fmt:bundle> Tndique le paquetage contenant les messages par langue.
<fmt:setLocale> Fixe la langue â utiliser.
<fmt:requestEncoding> Fixe l’encodage des caractères de la requête.
<fmt:timeZone> Précise la zone horaire du format de l’heure.
<fmt:setTimeZone> Stocke la zone horaire indiquée dans une variable.
<fmt:formatNumber> Formate une valeur numérique (nombre,
monnaie, pourcentage) selon la locale.
Exemple :
<%@ page contentType=”text/html;charset=UTF-8”language=”java”
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"
prefix="fmt" %>
<html>
<body> Dates :
<c:set var=”now” value=”<%=new java.util.Date()%>”/>
3
<fmt:formatDate type=”time” value=”${now}”/>
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
Currency :
<fmt:setLocale value=”en_us”/>
<fmt:formatNumber value=”20.50” type=”currency”/>
<fmt:setLocale value=”en_gb”/>
<fmt:formatNumber value=”20.50” type=”currency”/>
</body>
</html>
3. Actions SQL :
Les actions SQL de la JSTL permettent d’effectuer des requêtes sur une base de
données (insertions, modifications et suppressions), d’accéder aux résultats de ces
requêtes et même de mettre en place un contexte transactionnel. Nous avons déjâ vu
comment accéder â une base de données avec les entités JPA et les EJB mais, pour
des applications spécifiques, on a parfois besoin d’accéder â une base â partir d’une
page web (pour une application web d’administration non critique utilisée
occasionnellement par un unique utilisateur, par exemple) : dans ce cas, les
marqueurs de la bibliothèque SQL peuvent se révéler utiles.
Action Description
<sql:query> Interroge une base de données.
<sql:update> Exécute une instruction SQL INSERT, UPDATE ou
DELETE.
<sql:transaction> Établit un contexte transactionnel pour les marqueurs
<sql:query> et
<sql:update>.
<sql:setDataSource> Indique la source de données.
La page JSP ci-dessous accède à une base de données, récupère toutes les lignes de
la table Livre et les affiche.
<table border=”1”>
<tr>
<td>code</td>
<td>Title</td>
<td>Prix</td>
<td>Description</td>
<td>Nombre de pages</td>
<td>Illustrations</td>
</tr>
<c:forEach var=”row” items=”${lstLvs.rows}”>
<tr>
<td><c:out value=”${row.code}”/></td>
<td><c:out value=”${row.title}”/></td>
<td><c:out value=”${row.prix}”/></td>
<td><c:out value=”${row.description}”/></td>
<td><c:out value=”${row.nbPage}”/></td>
<td><c:out value=”${row.illustrations}”/></td>
</tr>
</c:forEach>
</table>
<hr/>
</body>
</html>
Cette JSP doit d’abord importer la bibliothèque sql avec une directive <%@
taglib> puis indiquer la source de données (ici, la source par défaut jdbc/
default fournie avec GlassFish).
5
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
4. Les Fonctions :
Les fonctions ne sont pas des marqueurs mais sont quand même définies
dans la spécification JSTL. Elles peuvent être utilisées avec EL et sont
principalement employées pour traiter les chaînes de caractères :
${fn:contains(”H2G2”, ”H2”)}
Ce code teste si une chaîne contient une sous-chaîne particulière : ici, cet appel
renverra true car H2G2 contient H2.
L’appel suivant renvoie la longueur d’une chaîne ou d’une collection : dans cet
exemple précis son résultat sera 4.
${fn:length(”H2G2”)}
Une JSP peut afficher les résultats des fonctions (avec un marqueur <c:out>)
ou les utiliser dans un test ou une boucle.
Exemple :
<%@ page contentType=”text/html;charset=UTF-8”language=”java”
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fn" prefix="fn"
%>
<html>
<body>
<c:out value=”${fn:toLowerCase(sentence)}”/>
<c:if test=”${fn:length(’H2G2’)
== 4}”> H2G2 is four
caracters long
</c:if>
</body>
</html>
Fonction Description
fn:contains Teste si une chaîne contient la sous-chaîne indiquée.
fn:containsIgnoreCase Idem, sans tenir compte de la casse.
fn:endsWith Teste si une chaîne se termine par le suffixe indiqué.
fn:escapeXml Protège les caractères pouvant être interprétés comme du
XML. fn:indexOf Renvoie l’indice de la première occurrence d’une sous-
chaîne dans une chaîne.
fn:join Joint tous les éléments d’un tableau pour former une chaîne.
fn:length Renvoie le nombre d’éléments d’une collection ou le
nombre de caractères d’une chaîne.
6
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
Lorsque JSF a été créé, le but consistait â réutiliser JSP comme PDL principal car
elle faisait déjà partie de Java EE. JSP utilisait EL et JSTL et l’idée consistait donc
â réutiliser toutes ces technologies avec JSF.
JSP est un langage de page et JSF, une couche de composants située au-dessus.
Cependant, les cycles de vie de JSP et de JSF ne s’accordent pas. Pour produire
une réponse, les marqueurs de JSP sont traités de haut en bas, dans l’ordre où ils
apparaissent ; alors que le cycle de vie de JSF est un peu plus compliqué puisque la
production de l’arborescence des composants et leur traitement ont lieu dans des
phases différentes.
Facelets entre donc en jeu pour correspondre au cycle de vie des JSF.
Facelets est une alternative open-source à JSP. À la différence de JSP, EL et JSTL,
Facelets n’a pas de JSR et ne fait pas partie de Java EE : c’est un remplaçant de JSP
qui fournit une alternative XML (XHTML) pour les pages d’une application JSF.
Facelets ayant été conçu en tenant compte de JSF, il fournit un modèle de
programmation plus simple que celui de JSP.
Facelets dispose d’une bibliothèque de marqueurs permettant d’écrire l’interface
utilisateur et reconnaît en partie les marqueurs JSTL. Bien que la bibliothèque de
fonctions soit intégralement disponible, seuls quelques marqueurs fondamentaux
(c:if, c:forEach, c:catch et c:set) sont reconnus. La caractéristique essentielle
de Facelets est son mécanisme de templates de pages, qui est bien plus souple que
celui de JSP. Il permet également de créer des composants personnalisés utilisables
dans le modèle arborescent de JSF.
La bibliothèque des marqueurs Facelets est définie par l’URI http://java.sun.
com/jsf/facelets et utilise généralement le préfixe ui.
7
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
Marqueurs Facelets :
Marqueur Description
<ui:composition> Défnit une composition qui utilise éventuellement un
template.
Plusieurs compositions peuvent utiliser le même template.
<ui:component> Crée un composant.
<ui:debug> Capture les informations de débogage.
<ui:define> Défnit le contenu inséré dans une page par un Template.
8
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
a. Marqueurs de commandes :
Marqueur Description
<h:commandButton> Représente un élément HTML pour un bouton de
type submit ou reset.
b. Marqueurs d’entrées :
Marqueur Description
<h:inputHidden> Représente un élément d’entrée HTML de type
caché (non affché).
<h:inputSecret> Représente un élément d’entrée HTML de type
mot de passe. Pour des raisons de sécurité, tout ce
qui a été saisi ne sera pas affché, sauf si la
propriété redisplay vaut true.
<h:inputText> Représente un élément d’entrée HTML de type
texte.
<h:inputTextarea> Représente une zone de texte HTML.
c. Marqueurs de sortie :
Marqueur Description
<h:outputLabel> Produit un élément <label> de HTML
d. Marqueurs de sélection :
Marqueur Description
<h:selectBooleanCheckbox> Produit une case à cocher représentant une
valeur booléenne unique. Cette case sera
initialement cochée ou décochée selon la
valeur de sa propriété checked.
<h:selectManyCheckbox> Produit une liste de cases à cocher.
9
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
Marqueur Description
<h:dataTab1e> Représente un ensemble de données qui
seront affichées dans un élément <tab1e>
de HTML.
f. Marqueurs de messages :
Marqueur Description
<h:message> Affiche un seul message d’erreur.
g. Marqueurs divers :
Marqueur Description
<h:body> Produit un élément <body> HTML.
<h:head> Produit un élément <head> HTML.
<h:form> Produit un élément <form> HTML.
10
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
h. Marqueurs de templates :
Marqueur Description
<ui:composition> Définit une composition utilisant éventuellement un
template. Le même Template peut être utilisé par
plusieurs compositions.
<ui:define> Définit un contenu qui sera inséré dans l’élément
<ui:insert>correspondant du Template.
<ui:decorate> Permet de décorer le contenu d’une page.
<ui:fragment> Ajoute un fragment â une page.
Marqueur Description
<composite:interface> Déclare le contrat d’un composant.
<composite:implementation> Définit l’implémentation d’un composant.
11
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki
j. Objets implicites :
12
Institut Supérieur De Gestion De Tunis cours AJEE
3èmeLFIG BAYOUDHI Chaouki
13