Vous êtes sur la page 1sur 27

Java EE

Programmation Web

Java Server Page (JSP)


Partie V :
JSP Standard Tag Library
(JSTL)
Préparé par : Larbi Hassouni
Introduction
• JSP Standard Tag Library (JSTL) fournit un ensemble de tags pour effectuer les
tâches courantes dont on a souvent besoin dans une page JSP
• Librairies JSTL
• Le tableau ci dessous présente les cinq librairies de tags inclus dans JSTL 1.2.

Nom Préfixe URI Description


Core C http://java.sun.com/jsp/jstl/core Contient les tags de bases pour effectuer les
tâches communes telles que les instructions de
boucles, de sélection (if/else)
Formatting Fmt http://java.sun.com/jsp/jstl/fmt Fournit les tags pour formater les nombres, dates
et heures et sont donc utilisés pour
l'internationalisation d'une application (i18n)
SQL Sql http://java.sun.com/jsp/jstl/sql Fournit les tags pour travailler avec les requêtes
SQL.
XML X http://java.sun.com/jsp/jstl/xml Fournit les tags pour manipuler les documents
XML.
Functions fn http://java.sun.com/jsp/jstl/functions Fournit les tags pour manipuler les strings.
JSTL 2
La librairie JSTL core, comme son nom l'indique, fournit les tags pour
éffectuer les fonctionnalités de base, telles que gérer les variables de scope,
coder les URLs, itérer à traver les collections, et coder les instructions de
selection (if/else …).

Si vous respectez le modèle MVC, JSTL core est la seule librairie dont
vous aurez besoin pour developer vos pages JSP.
Cependant, si besoin est, vous pouvez utiliser les quatre autres librairies
pour travailler avec l'internationalization, les bases de données, les
documents XML, et les strings.

JSTL 3
❑Comment rendre les fichiers jar JSTL disponibles pour votre
application
• Avant que vous puissiez utiliser les tags JSTL dans votre application,
vous devez rendre les fichiers jstl-impl.jar et jstl-api.jar disponibles
pour votre application.
• Pour ce faire sous NetBeans, vous pouvez ajouter les fichiers jstl.jar et
standard.jar au dossier librairie de votre projet.
❑Comment coder la directive taglib
• Avant que vous ne puissiez utiliser les tags JSTL dans votre JSP, vous
devez coder une directive taglib pour spécifier l'URI et le préfixe de la
librairie JSTL.
• la directive ci-dessous spécifie l'URI de la JSTL core avec le préfixe c,
qui est le préfixe typique utilisé avec cette librairie JSTL.
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core %>
JSTL 4
❑Comment coder une tag JSTL
• Une fois vous avez ajouté les fichier JARs appropriés à votre
application et utilisé la directive taglib pour identifier la
librairie, vous pouvez coder les tags jstl dans votre page JSP.
• La tag ci-dessous produit une sortie vers le browser
<td><c:out value="${item.product.description}" /></td>
Les tags JSTL utilisent une syntaxe similaire à HTML. Elles sont
donc faciles à coder et à lire, spécialement par les concepteurs
webs et autres non programmeurs qui sont habitués avec la
syntaxe HTML.

JSTL 5
Tags d'itération
❑Itération avec des valeurs numériques explicites
<c:forEach var="name" begin="x" end="y" step="z">
Blabla, blabla ${name}
</c:forEach>
❑Itération avec les tableaux et collections
• Peut itérer avec des tableaux, strings, collections et maps
<c:forEach var="name" items="array-or-collection">
Blabla, blabla ${name}
</c:forEach>
❑Itérer avec des strings séparés par délimiteurs
<c:forTokens var="…" items="…." delims"…" >
…..
</c:forTokens>
JSTL 6
Itération avec des valeurs numériques simples : jstl01.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title> </head> <body>
<ul>
<c:forEach var="i" begin="1" end="10">
<li>${i}</li>
</c:forEach>
</ul>
<table>
<tr><th>Value</th>
<th>Square</th>
</tr>
<c:forEach var="x" begin="0" end="10" step="2">
<tr><td><c:out value="${x}"/></td>
<td><c:out value="${x * x}"/></td>
</tr>
</c:forEach>
</table>
JSTL
</body></html> 7
JSTL 8
Itération avec des valeurs numériques utilisant un pas : Exemple02.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>

<ul>
<c:forEach
var="seconds"
begin="0"
end="${pageContext.session.maxInactiveInterval}"
step="100">
<li>${seconds} seconds.</li>
</c:forEach>
<li>Timeout exceeded.</li>
</ul>
</body>
</html>
JSTL 9
JSTL 10
Itération avec des tableaux (Servlet) : ArrayServlet.java
package mypkg;

import java.io.IOException;
………..

@WebServlet(name = "ArrayServlet", urlPatterns = {"/test-array"})


public class ArrayServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String[] words = { "foo", "bar", "baz"};
request.setAttribute("words", words);
String address = "/WEB-INF/results/exemple03.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}
JSTL 11
Itération avec des tableaux (JSP) : Exemple03.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title> </head>
<body>
<h2>Key Words:</h2>
<ul>
<c:forEach var="word" items="${words}">
<li>${word}
</c:forEach>
</ul>
<h2>Values of the test Parameter:</h2>
<ul>
<c:forEach var="val" items="${paramValues.test}">
<li>${val}</li>
</c:forEach>
</ul>
</body></html>
JSTL 12
JSTL 13
Itération avec des collections
❑Peut itérer avec des collections autres que les tableaux
• “items” peut référencer un tableau, collection (List, Map, Set, etc.), strings
séparés avec virgule, Iterator, ou Enumeration

❑Peut accéder au sous-éléments d'une variable locale


<c:forEach var="bean" items="${collectionOfBeans}">
${bean.property}
</c:forEach>
<c:forEach var="collection" items="${collectionOfCollections}">
${collection[part]}
</c:forEach>
JSTL 14
Itération avec tableaux : accès aux sous éléments (Servlet):ArraySrvlet2.java

package mypkg;
import java.io.IOException;
……………………….
@WebServlet(name = "ArrayServlet2", urlPatterns = {"/test-array2"})
public class ArrayServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Name[] names = { new Name("Bill", "Gates"),
new Name("Larry", "Ellison"),
new Name("Sam", "Palmisano"),
new Name("Scott", "McNealy"),
new Name("Eric", "Schmidt"),
new Name("Jeff", "Bezos") };
request.setAttribute("names", names);
String[][] sales ={ {"2005", "12,459", "15,622"}, {"2006", "18,123", "17,789"}, {"2007", "21,444", "23,555"} };
request.setAttribute("sales", sales);
String address = "/WEB-INF/results/Exemple04.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);}}
JSTL 15
Itération avec tableaux : accès aux sous éléments (Bean)Name,java
public class Name {
private String firstName;
private String lastName;
public Name(String firstName, String lastName) {
setFirstName(firstName);
setLastName(lastName);
}
public String getFirstName() { return(firstName); }
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() { return(lastName); }
public void setLastName(String lastName) {
this.lastName = lastName;
}
}

JSTL 16
Itération avec tableaux : accès aux sous éléments (JSP) Exemple04.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>
</head> <body> <h2>Liste des noms et prénoms</h2>
<ul>
<c:forEach var="name" items="${names}">
<li>${name.firstName} ${name.lastName}</li>
</c:forEach>
</ul>
<h2>Comparing Apples and Oranges</h2>
<table border="1">
<tr><th>Year</th> <th>Apples Sold</th> <th>Oranges Sold</th></tr>
<c:forEach var="row" items="${sales}">
<tr><c:forEach var="col" items="${row}">
<td>${col}</td>
</c:forEach></tr>
</c:forEach>
</table> </body></html>
JSTL 17
JSTL 18
Informations sur l'état de la boucle
Attribut varStatus
❑ Vous pouvez affecter l'attribut varStatus
<c:forEach var="name" items="${names}" varStatus="status">
❑ Vous pouvez tester les propriétés de "status" (status.propriété)
En utilisant le tag de test <c:if ………..> …….</c:if> (présenté ultérieurement)
• Propriétés de Status
– index (int: l'indice courant)
– first (boolean: s'agit-il du premier élément?)
– last (boolean: s'agit-il du dernier élément?)
– begin (Integer: valeur de l'attribute "begin")
– end (Integer: valeur de l'attribute "end"))
– step (Integer: valeur de l'attribute "step"))

JSTL 19
Informations sur l'état de la boucle : Exemple05.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
String[] names = {"Moha", "Toto", "Manolo", "Tiji"};
request.setAttribute("names", names);
%>
<h2>Names:
<c:forEach var="name" items="${names}" varStatus="status">
${name}<c:if test="${!status.last}">,</c:if>
</c:forEach>
</h2>
</body>
</html>
JSTL 20
Itération avec des strings délimités avec virgule : Exemple06.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<ul>
<c:forTokens
var="country"
items="Maroc,Algerie,Tunisie,Egypte">
<li>${country}</li>
</c:forTokens>
</ul>
</body>
</html>
JSTL 21
Itération avec des strings délimités avec des caractères quelconques
Tag forTokens:Exemple07.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<ul>
<c:forTokens
var="color"
items="(red (orange) yellow)(green)((blue) violet)"
delims="() ">
<LI>${color}
</c:forTokens>
</UL>
</body>
</html>
JSTL 22
Tags logique : Tags d'évaluation conditionnelle

❑ Un seul choix : if
<c:if test="${someTest}">
Content
</c:if>

❑ Plusieurs choix: choose


<c:choose>
<c:when test="test1">Content1</c:when>
<c:when test="test2">Content2</c:when>
...
<c:when test="testN">ContentN</c:when>
<c:otherwise>Default Content</c:otherwise>
</c:choose>

JSTL 23
Tag if : Exemple08.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<ul>
<c:forEach var="i" begin="1" end="10">
<li>${i}
<c:if test="${i mod 2 eq 0}">
(pair)
</c:if>
</c:forEach>
</ul>
</body>
</html>
JSTL 24
Tag choose : Exemple09.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<ul>
<c:forEach var="i" begin="1" end="10">
<li>${i}
<c:choose>
<c:when test="${i < 4}"> (small) </c:when>
<c:when test="${i < 8}"> (medium) </c:when>
<c:otherwise> (large) </c:otherwise>
</c:choose>
</c:forEach>
</ul>
</body>
</html>
JSTL 25
Exemple d'applications d'Ecommerce : ventes de livres

JSTL 26
JSTL 27

Vous aimerez peut-être aussi