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} €) <c:if test="${empl.salaire > 5000.0}"> <img src='plus.png' alt='Plus de 5000 €'/> </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