Chapitre 3 Les bibliothèques de balises JSP et la JSTL Chapitre 3 - Bibliothèques de balises et JSTL Chapitre 3 Les bibliothèques de balises JSP et la JSTL
Chapitre 3 - Bibliothèques de balises et JSTL Sommaire Les bibliothèques de balises JSP La JSTL (Java Standard Tag Library)
Les bibliothèques de balises JSP
Les bibliothèques de balises Les bibliothèques de balises personnalisables (custom tags Encapsulent des fonctions complexes à utiliser dans les JSPs Utilisées pour la création d'un contenu dynamique Ce sont des classes qui implémentent l'interface Tag du Pacakge javax.servlet.jsp.tagext
include use tags in tag library include use tags in tag library 1 <?xml version = "1.0" ?> 2 <!DOCTYPE html PUBLIC " - //W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1 - strict.dtd" > Use Use taglib taglib directive to directive to 4 Fig. 10.30 JSP 5 <! -- Fig. 10.30: customTagWelcome . jsp -- > include use tags in tag library include use tags in tag library 6 <! -- JSP that uses a custom tag to output content. -- > 7 8 <% -- taglib directive -- %> 9 <%@ taglib uri = "advjhtp1 - taglib.tld" prefix = "advjhtp1" %> 10 11 <html xmlns = "http://www.w3.org/1999/xhtml" > 12 13 <head> 14 <title> Simple Custom Tag Example </title> 15 </head> 16 17 <body> 18 <p> The following text demonstrates a custom tag: </p> 19 <h1> Use custom tag Use custom tag welcome welcome 20 <advjhtp1:welcome /> to insert text in the JSP to insert text in the JSP 21 </h1> 22 </body> 23 24 </html>
WelcomeTag - Handler Tag Lines 15 32 Line 20 1 // Fig. 10.31: WelcomeTagHandler .java 2 // Custom tag handler that handles a simple tag. 3 package com.deitel.advjhtp1.jsp.taglibrary; 4 5 // Java core packages 6 import java. io .*; 7 8 // Java extension packages 9 javax . servlet jsp 10 tagext 11 12 public class extends TagSupport { 13 14 // Method called to begin tag processing 15 public int doStartTag () throws JspException 16 17 // attempt tag processing 18 try 19 // obtain JspWriter to output content 20 out = pageContext getOut (); 21 22 // output content 23 out.print( "Welcome to JSP Tag Libraries!" ); 24 } 25 26 // rethrow IOException to JSP container as 27 catch ( ioException ) { 28 throw new getMessage () ); 29 30 31 return SKIP_BODY ; // ignore the tag's body 33 Class implements interface Tag by extending class JSP container calls method when it encounters the starting custom tag Use custom tag handler ’ s to obtain JSP object for outputting text
library descriptor file advjhtp1 - taglib . tld Line 18 1 <?xml version = "1.0" encoding = "ISO 8859 1" ?> 2 <!DOCTYPE PUBLIC 3 " //Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 4 "http://java.sun.com/j2ee/dtds/web jsptaglibrary_1_1.dtd" > 5 6 <! -- a tag library descriptor 7 8 < 9 tlibversion 1.0 </ 10 jspversion 1.1 11 shortname 12 13 <info> 14 A simple tab library for the examples 15 </info> 16 17 A simple tag that outputs content 18 <tag> 19 <name> welcome </name> 20 21 tagclass 22 com.deitel.advjhtp1.jsp.taglibrary.WelcomeTagHandler 23 24 25 bodycontent empty 26 27 28 Inserts content welcoming user to tag libraries 29 30 </tag> 31 Define custom tag library descriptor file element describes custom tag Specify custom tag name and class
La JSTL (JSP Standard Tag Library) et le langage EL
Mais qu'est ce qui ne va pas dans les tags JSP ? Chapitre 3 - Bibliothèques de balises et JSTL Mais qu'est ce qui ne va pas dans les tags JSP ? The tag-extension protocol is too complicated Too hard for Gosling, even? Tag handler doStartTag() doEndTag() doAfterBody() doInitBody() release() doCatch() doFinally()
Organisation JSP/JSTL Your web pages Your application JSTL JavaServer Pages (JSP) Java Servlet API Java language
JSTL Depuis la version JSP 1.2 Spécification développé par le groupe d’experts JSR 52 Collection de Tag Librairies personnalisées qui implémentent la plus part des fonctions communes aux pages web: Itérations et conditions (core) Formatage des données (format) Manipulation de XML (xml) Accès au bases de données (sql) Utilisation du langage EL (Expression Language) Avantages Code simple, lisible et facile à maintenir Le concepteur de page est libéré de code Java Évite au développeur d’écrire à chaque fois les fonctions de bases.
EL: Expression Language Spécification de EL sous l’autorité du groupe d’expert JSR-152 pour JSP 1.3 Le JSR-52 et JSR-152 travail ensemble sur la spécification de l’Expression Language En JSTL il est utilisé uniquement dans la valeur d’un attribut: <prefix:tag attr1="${ expr }" /> Il est invoqué exclusivement via la syntaxe ${ expr }
EL: Expression Language objets prédéfinies Un identificateur dans EL fait référence à une variable retourné par l’appel de pageContext.findAttribute(identificateur) et qui est dans la portée (scope): page, request, session ou application. ${ var } = pageContext.getAttribute("var") Objets implicites: pageScope, requestScope, sessionScope, applicationScope Accès au paramètres d’une requête HTTP via param (objet de type Map) et paramValue Un objet implicite pageContext qui donne accès aux propriétés associés au contexte de la page JSP
EL: Expression Language objets prédéfinies In ${param.name}, param is one of a set of implicit objects defined in the JSP expression language Others include: pageContext.servletContext pageContext.session pageContext.request pageContext.response paramValues header headerValues
JSTL core tag library Fonctions de base Affichage <c: out value=" expression " /> <%= expression %> Affectation <c:set value="value" var=" varName " scope=" application " /> <% pageContext.setAttribute("varName",value,SCOPE) %> Exception java.lang.Throwable <c:catch [var="varName"] > actions a surveiller </c:catch> <% try{ actions à surveiller }catch(Throwable varName){} %>
JSTL core tag library Les conditions 1- simple if(cond) 2-choix multiple if/else <c:if test="${user.visitCount = = 1}"> <c:out value="Première visite.Bienvenue!" /> </c:if> <% if(user.visitCount == 1){ %> <%= "Prmière visite.Bienvenue" %> <% } %> <c:choose> <c:when test="${count == 0}”> Pas de visite! </c:when> <c:otherwise> <c:out value="${count}"/> visiteurs. </c:otherwise> </c:choose> <% If(count == 0){ %> <%= Votre compte est vide %> <% }else{ %> <%= count+"visiteurs" %> <% } %>
JSTL core tag library en JSTL Les itérations avec la boucle for/while en JSP <%@page import="java.util.*" %> <% Member user = null; Collection users = session.getAttribute("members"); Iterator it = users.iterator(); while(it.hasNext()){ user = (Member) it.next(); %> <%= "nom: "+user.getName() %> <% } %> en JSTL forEach <c:forEach var=”user” items=”sessionScope.members” [begin] [end] [step]> <c:out value="nom: ${user.name}" /> </c:forEach>
Exemple : Code JSP <% Enumeration names=request.getParameterNames(); while (names.hasMoreElements()) { String pname=(String)names.nextElement(); %> <p><b><%= pname %>:</b> <% String[] values=request.getParameterValues(pname); for (int n=0; n<values.length; ++n) { <%= values[n] %> <%} }
Exemple : Code équivalent avec JSTL EL <c:forEach var='parameter' items='${paramValues}'> <p><b><c:out value='${parameter.key}'/></b>: <c:forEach var='value' items='${parameter.value}'> <c:out value='${value}'/> </c:forEach> The <c:xxx> tags are from the JSTL The ${} elements are expression language evaluations