Licence Professionnelle IUT de Nantes (Expression Language)

Transcription

Licence Professionnelle IUT de Nantes (Expression Language)
JSP
JSTL (JSP Standard Tag Library)
et E.L. (Expression Language)
Licence Professionnelle
IUT de Nantes
Laurent Guérin / V 1.5 / Janvier 2008
E. L.
(Expression Language)
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
1
E L ( Expression Language )
Java / J S P
« EL » permet d’évaluer et de récupérer le
résultat d’une expression insérée à
n’importe quel endroit d’une JSP, ou dans
un attribut d’un tag de la JSTL.
Expression encadrée par ${ … }
<h2> Nom : ${employe.nom} </h2>
Deux versions de « E.L. » :
Pour JSP 1.3 (spécifications JSR-152)
Pour JSTL (spécifications JSR-52)
J2EE - JSP / Laurent Guérin
3
E L ( Expression Language )
Accès aux propriétés d’un objet :
Java / J S P
Par l’attribut : ${ employe.nom }
Par l’indice : ${ liste[2] }
Par le nom : ${ param['nom'] }
Objets implicites ( pré-définis )
pageContext
Maps :
${ pageContext.response.contentType }
param ( paramètres de la requête )
paramValues ( paramètres de la requête )
${header["user-agent"]}
header ( headers de la requête )
${param["action"]}
headerValues ( headers de la requête)
cookie
initParam ( « init-params » du web.xml )
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
4
2
E L ( Expression Language )
Java / J S P
Dans une expression EL, un identifiant fait
référence au nom d’un objet pouvant être
stocké au niveau ..
page
request
session
application
SCOPE
Objets implicites E.L. :
. pageScope
. requestScope
. sessionScope
. applicationScope
« EL » remplace donc efficacement
les tags <jsp:useBean ..>,
<jsp:getProperty..> et
les expressions <%= ..Java.. %>.
J2EE - JSP / Laurent Guérin
5
E L ( Expression Language )
Java / J S P
Exemple :
<%@ page import="my.package.Societe" %>
...
<h3> Employe
<%= ((Societe)request.getAttribute("soc")).getNom()%>
</h3>
<h3> Employe ${requestScope.soc.nom} <h3>
<h3> Employe ${soc.nom} <h3>
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
6
3
E L ( Expression Language )
Java / J S P
En l’absence de « scope », l’ordre de
recherche des attributs est :
page request session application
( utilise le premier trouvé )
Si non trouvé "" (chaîne vide),
pas d’erreur
<h3> Employe ${sessionScope.employe.nom} <h3>
Référence d’un objet à partir d’un autre :
<h2> Nom : ${employe.societe.ville} </h2>
J2EE - JSP / Laurent Guérin
7
E L ( Expression Language )
Java / J S P
EL dispose d’un ensemble d’opérateurs
classiques :
Relationnels : >, <, ==, !=, <=, >=
Arithmétiques : +, -, /, *, %
Logiques :
&&, ||, !
Vide ou null :
empty
<h2> Prix : ${article.prix * 1.2 } </h2>
<c:if test="${bean1.a < 3}" />
<c:if test="${ ! empty employe.nom }" />
<h2> Admin : ${employe.cadre && employe.manager}
</h2>
"true" ou "false"
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
8
4
JSTL
JSTL
Java / J S P
Grâce aux « TagLibs » de nombreuses librairies
ont été développées.
Certaines librairies ont été normalisées par le JCP
JSTL : JavaServer Pages Standard Tag Library
JSR - 52
RI (Reference Implementation ) = Jakarta
http://www.jcp.org/
http://jakarta.apache.org/taglibs/
Deux versions de JSTL :
JSTL 1.0 ( => Servlet 2.3 & JSP 1.2 / J2EE 1.3 / Tomcat 4 )
JSTL 1.1 ( => Servlet 2.4 & JSP 2.0 / J2EE 1.4 / Tomcat 5 )
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
10
5
JSTL
Java / J S P
Objectif : réduire (ou même supprimer) le code
Java dans les JSP
JSTL = collection de tags visant à simplifier les
traitements les plus souvent réalisés avec du code
Java dans les JSP :
Gestion des itérations sur des collections
Formatage de données
Internationalisation
Accès aux bases de données relationnelles via SQL
Accès aux arbres XML
Fonctions diverses
J2EE - JSP / Laurent Guérin
11
J S T L & E L : Exemple
Java / J S P
<%@
<%@
<%@
<%@
taglib uri="/WEB-INF/tld/c.tld"
prefix="c" %>
taglib uri="/WEB-INF/tld/fmt.tld" prefix="fmt" %>
taglib uri="/WEB-INF/tld/sql.tld" prefix="sql" %>
page errorPage="errorpage.jsp" %>
<sql:setDataSource dataSource="jdbc/BookDB"/>
<c:if test="${!empty param.Add}">
<c:set var="bid" value="${param.Add}"/>
<sql:query var="books">
select * from PUBLIC.books where id = ?
<sql:param value="${bid}" />
</sql:query>
<c:forEach var="bookRow" begin="0" items="${books.rowsByIndex}">
… … …
</c:forEach>
</c:if>
… … …
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
12
6
JSTL
Java / J S P
La JSTL 1.1 se compose de
5 bibliothèques de tags :
Library
« core » (fonctions de base)
TLD
Prefix
c.tld
c
x.tld
x
fmt.tld
fmt
uri = « http://java.sun.com/jsp/jstl/core »
« xml » (traitements xml)
uri = « http://java.sun.com/jsp/jstl/xml »
« fmt » (formatage, internationalisation)
uri = « http://java.sun.com/jsp/jstl/fmt »
« sql » (accès aux SGBD, traitements SQL) sql.tld
sql
uri = « http://java.sun.com/jsp/jstl/sql »
« functions » ( fonctions)
fn.tld
fn
uri = « http://java.sun.com/jsp/jstl/functions »
J2EE - JSP / Laurent Guérin
13
JSTL
Avant utilisation, la JSTL doit être installée
Principe d’installation :
Java / J S P
Télécharger la JSTL sur http://jakarta.apache.org
Copier les fichiers « .jar » dans « WEB-INF/lib »
http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html
jstl.jar
standard.jar
Copier les fichiers « .tld » dans « WEB-INF/tld »
c.tld
fmt.tld
fn.tld
sql.tld
x.tld
Utiliser l’URI « WEB-INF/tld/xxx.tld » dans les JSP
<%@ taglib uri="/WEB-INF/tld/c.tld"
prefix="c" %>
<%@ taglib uri="/WEB-INF/tld/fmt.tld" prefix="fmt" %>
<%@ taglib uri="/WEB-INF/tld/sql.tld" prefix="sql" %>
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
14
7
J S T L : Exemple
Java / J S P
Boucle sur une liste d’employés, stockée au
niveau « request »
<%@ taglib uri="/WEB-INF/tld/c.tld"
prefix="c" %>
<ul>
<c:forEach items="${requestScope['emplist']}" var="empl"
varStatus="status">
<li class="${status.index%2==0?'pair':'impair'}"> ${empl.nom}
(${empl.salaire} &euro;)
<c:if test="${empl.salaire > 5000.0}">
<img src='plus.png' alt='Plus de 5000 &euro;'/>
</c:if>
</li>
</c:forEach>
</ul>
J2EE - JSP / Laurent Guérin
15
J S T L : « core »
Taglib « core »
Java / J S P
Fichier « c.tld »
Préfix standard « c »
14 tags :
• out
• set
• remove
•
•
•
•
if
choose
when
otherwise
• forEach
• forTokens
• url
• catch
• import
• param
• redirect
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
16
8
J S T L : « core »
« set » « out » « remove »
Java / J S P
<%@ taglib uri="/WEB-INF/tld/c.tld"
<%-- Stockage dans
<c:set var="name1"
<c:set var="name2"
<c:set var="name3"
<c:set var="name4"
différents
value="v1"
value="v2"
value="v3"
value="v4"
prefix="c" %>
« scope » --%>
scope="page" />
scope="request" />
scope="session" />
scope="application" />
<%-- Génération des valeurs stockées AVEC SCOPE --%>
<c:out value='${pageScope.name1}' />
<c:out value='${requestScope.name2}' />
<c:out value='${sessionScope.name3}' />
<c:out value='${applicationScope.name4}' />
<%-- Idem SANS SCOPE --%>
<c:out value='${name1}'/>
<c:out value='${name2}'/>
<c:out value='${name3}'/>
<c:out value='${name4}'/>
<%-- Suppression --%>
<c:remove var="name1" scope="page"/>
<c:remove var="name2" scope="request"/>
J2EE - JSP / Laurent Guérin
17
J S T L : « core »
« set » et « out »
Java / J S P
<%@ taglib uri="/WEB-INF/tld/c.tld"
prefix="c" %>
<%-- Valeur par défaut dans un attribut --%>
<c:out value="${param.p}"
default="Valeur par défaut si p est null" />
<%-- Valeur par défaut dans le corps du tag --%>
<c:out value="${param.p}">
Texte généré si "p" est "null"
</c:out>
<c:set var="name1" scope="page">
ligne 1
ligne 2
</c:set>
Contenu stocké :
"line 1\n line 2"
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
18
9
J S T L : « core »
Structures de contrôle « if » et « choose »
<%@ taglib
uri="/WEB-INF/tld/c.tld"
prefix="c" %>
Java / J S P
<c:if test="${param.p == "A" }">
Ce texte est généré si le paramètre « p » vaut « A »
</c:if>
<c:if test="${x.done}">
Ce texte est généré si x.done renvoie « true »
</c:if>
<c:choose>
<c:when test="${x.status == 1}">
...
</c:when>
<c:when test="${x.status == 2}">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>
J2EE - JSP / Laurent Guérin
19
J S T L : « core »
Java / J S P
Structures de contrôle « if » et « choose »
<c:choose>
<c:when test="${empty param.name}">
Indiquer votre nom SVP.
</c:when>
<c:otherwise>
Bonjour <b> <c:out value="${param.name}" /> </b>!
</c:otherwise>
</c:choose>
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
20
10
J S T L : « core »
Boucles sur des collections « forEach »
Java / J S P
<c:forEach var="i" begin="1" end="10">
${i} (${i%2==0?'pair':'impair'}),
</c:forEach>
1 (impair), 2 (pair), 3 (impair), 4 (pair), 5 (impair), 6
(pair), 7 (impair), 8 (pair), 9 (impair), 10 (pair),
<!-- Liste des paramètres de la requête HTTP (param est une Map)-->
<h3>Parameters : </h3>
<c:forEach var="entry" items="${param}" >
Param "${entry.key}" = "${entry.value}"<br/>
</c:forEach>
<!-- Liste des beans d’une collection ( LinkedList, .. )-->
<c:forEach var="personne" items="${NomDeLaListe}" >
Individu : "${personne.prenom}" "${personne.nom}"<br/>
</c:forEach>
J2EE - JSP / Laurent Guérin
21
J S T L : « core »
Boucles sur des ‘tokens’ : « forTokens »
Java / J S P
<c:forTokens var="mot" items="mot1;mot2;mot3;mot4" delims=";">
${mot}<br/>
</c:forTokens>
<c:forTokens var="mot" items="mot1 mot2
delims=",;. ">
${mot}<br/>
</c:forTokens>
mot3, mot4;mot5 mot6. mot7 "
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
22
11
J S T L : « format »
Taglib « format »
Java / J S P
Fichier « fmt.tld »
Préfix standard « fmt »
12 tags :
• formatNumber
• parseNumber
• bundle
• setBundle
• requestEncoding
• setLocale
• formatDate
• parseDate
• message
• param
• timeZone
• setTimeZone
J2EE - JSP / Laurent Guérin
23
J S T L : « format »
Exemples
Java / J S P
<%@ taglib prefix="fmt" uri="/WEB-INF/tld/fmt.tld" %>
<% request.setAttribute("now", new java.util.Date() ); %>
<h1>JSTL - "fmt:formatDate" :</h1>
<h2> type="time" = <fmt:formatDate value="${now}" type="time" />
</h2>
18:42:18
<h2> type="date" = <fmt:formatDate value="${now}" type="date" />
</h2>
5 févr. 2008
<h2> type="both" = <fmt:formatDate value="${now}" type="both" />
</h2>
5 févr. 2008 18:42:18
<h2> pattern="dd/MM/yyyy" = <fmt:formatDate value="${now}"
pattern="dd/MM/yyyy" /> </h2> 05/02/2008
<h2> pattern="yyyy-MM-dd" = <fmt:formatDate value="${now}"
pattern="yyyy-MM-dd" /> </h2>
2008-02-05
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
24
12
J S T L : « functions »
Java / J S P
Fichier « fn.tld », Préfix standard « fn »
Il ne s’agit plus de tags, mais de « fonctions »
utilisables dans les expressions « EL »
boolean
contains( java.lang.String, java.lang.String)
boolean
containsIgnoreCase( java.lang.String, java.lang.String)
boolean
endsWith( java.lang.String, java.lang.String)
java.lang.String escapeXml( java.lang.String)
Int
indexOf( java.lang.String, java.lang.String)
java.lang.String join( java.lang.String[], java.lang.String)
int
length( java.lang.Object)
java.lang.String replace( java.lang.String, java.lang.String, java.lang.String)
java.lang.String[] split( java.lang.String, java.lang.String)
boolean
startsWith( java.lang.String, java.lang.String)
java.lang.String substring( java.lang.String, int, int)
java.lang.String substringAfter( java.lang.String, java.lang.String)
java.lang.String substringBefore( java.lang.String, java.lang.String)
java.lang.String toLowerCase( java.lang.String)
java.lang.String toUpperCase( java.lang.String)
java.lang.String trim( java.lang.String)
J2EE - JSP / Laurent Guérin
25
J S T L : « functions »
Exemples
Java / J S P
<%@ taglib prefix="c" uri="/WEB-INF/tld/c.tld" %>
<%@ taglib prefix="fn" uri="/WEB-INF/tld/fn.tld" %>
<c:set var="tempStr" value="Java is the best language"/>
length : ${fn:length(tempStr)}<br/>
Does it contain "test" ? ${fn:contains(tempStr,"test")}<br/>
Does it contain 'Java' ? ${fn:contains(tempStr,'Java')}<br/>
To upper case with fn:toUpperCase() :
${fn:toUpperCase(tempStr)}<br/>
Array length after fn:split() :
${fn:length(fn:split(tempStr," "))}<br/>
J2EE - JSP / Laurent Guérin
JSP ( Cours Licence Pro. - IUT de Nantes - Laurent Guérin )
26
13