Archive pour le tag 'jstl'

JSTL & EL - afficher l’identifiant de session

21 février 2008

Vous utilisez la JSTL et les EL. Vous avez banni les scriplets de vos pages JSP. Mais comment faire référence à l’identifiant de session HTTP dans vos pages JSP ?

C’est tout simple. Mais quand cela fait longtemps que l’on a pratiqué ce genre d’astuce, il est difficile de retrouver la bonne méthode. Alors, pour ne plus oublier, voici la page JSP permettant d’afficher l’identifiant de la session JSP (plus connu sous le doux nom de JSESSIONID) :

<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root
 xmlns:jsp="http://java.sun.com/JSP/Page”
 xmlns=”http://www.w3.org/1999/xhtml”
 version=”2.0″>
<jsp:directive.page
 language=”java”
 contentType=”text/html; charset=UTF-8″
 pageEncoding=”UTF-8″ />
<jsp:output
 omit-xml-declaration=”false”
 doctype-root-element=”html”
 doctype-public=”-//W3C//DTD XHTML 1.0 Strict//EN”
 doctype-system=”http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”/>
<html>
 <head>
 	<title>Display JSP session id</title>
 </head>
 <body>
 	Your jsessionid is ${pageContext.session.id} !
 </body>
</html>
</jps:root>

Et oui ! C’est aussi simple que ça. ;-)

JSTL & EL - utiliser des constantes Java

15 septembre 2006

Vous utilisez la JSTL et les EL. Vous avez banni les scriplets de vos pages JSP. Mais comment faire référence à une constante Java dans vos pages JSP ?

Jakarta Taglibs propose les unstandar tags. Parmi ces tags, il y a le tag <un:useConstants/>. Ce tag permet d’enregistrer dans un context les constantes d’une classe Java sous la forme d’une Map.

Puisqu’un exemple est plus efficace qu’un long discours. Voici une mise en application de l’utilisation de constante dans une page JSP :

Le code Java :
package com.company.project.MyConstants; public class MyConstants {
	public static final String PROJECT = "My Project";
	public static final String VERSION = "1.0.0";
}
La page JSP :
<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root
	xmlns:jsp="http://java.sun.com/JSP/Page"
	xmlns:un="http://jakarta.apache.org/taglibs/unstandard-1.0"
	xmlns="http://www.w3.org/1999/xhtml"
	version="2.0">
<jsp:directive.page
	language="java"
	contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" />
<jsp:output
	omit-xml-declaration="false"
	doctype-root-element="html"
	doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
	doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<html>
	<head>
		<title>Use of Java constants</title>
	</head>
	<body>
		<un:useConstants var="myconstants" className="com.company.project.MyConstants" />
		Welcome to ${myconstants.PROJECT} v${myconstants.VERSION} !
	</body>
</html>
</jps:root>

Comme vous pouvez le constater, ce tag facilite grandement la tâche et vous évitera quelques noeuds au cerveau. :-)

JSTL - changer la locale de l’utilisateur

29 août 2006

Comment faire pour changer la locale de l’utilisateur dans le code d’une servlet lorsque l’on utilise les tags <fmt:message /> de la JSTL pour afficher des messages ?

La solution est très simple, même si peu connue :

String language = "fr";
String country = "FR";
Locale locale = new Locale(language, country);
HttpSession session = request.getSession();
//Le code ci-dessous peut être remplacé par String attrName = javax.servlet.jsp.jstl.core.Config.FMT_LOCALE+".session";
String attrName = "javax.servlet.jsp.jstl.fmt.locale.session";
session.setAttribute(attrName, locale);

Ainsi, vous allez pouvoir changer la locale et surtout la langue de l’utilisateur dans vos applications web.

JSP 2.0, JSTL 1.1 - impossible d’utiliser les expressions languages dans des taglibs

16 août 2006

Vous vous êtes décidé d’écrire les pages JSP 2.0 avec la JSTL 1.1 le tout en XML[1]. Il faut dire au revoir aux scriptlets et bonjour aux EL ! ;-) Mais vous rencontrez peut-être cette erreur :

org.apache.jasper.JasperException: /index.jsp(33,32) According to TLD or attribute directive in tag file, attribute value does not accept any expressions
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:585)
	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
	java.security.AccessController.doPrivileged(Native Method)
	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
	java.security.AccessController.doPrivileged(Native Method)
	java.security.AccessController.doPrivileged(Native Method)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
	org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
	org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239)
	org.apache.struts.tiles.TilesRequestProcessor.internalModuleRelativeForward(TilesRequestProcessor.java:341)
	org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:572)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:221)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:585)
	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
	java.security.AccessController.doPrivileged(Native Method)
	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)

Votre page JSP commence sûrement par quelque chose qui ressemble à ceci :

<jsp:root
	xmlns:jsp="http://java.sun.com/JSP/Page"
	xmlns:c="http://java.sun.com/jstl/core"
	xmlns="http://www.w3.org/1999/xhtml"
	version="2.0">

Si c’est le cas, la déclaration ci-dessus correspond à la JSTL 1.0.

Le problème vient du fait que vous utilisez un moteur JSP 2.0 qui traite les EL avant d’appeler les taglibs. Ce moteur n’est pas compatible avec les taglibs qui intègrent la gestion des EL comme le fait la JSTL 1.0. Pour résoudre ce problème, il faut utiliser la JSTL 1.1 qui est faite pour les JSP 2.0.

Pour déclarer l’utilisation des JSTL 1.1, votre page JSP doit commencer ainsi :

<jsp:root
	xmlns:jsp="http://java.sun.com/JSP/Page"
	xmlns:c="http://java.sun.com/jsp/jstl/core"
	xmlns="http://www.w3.org/1999/xhtml"
	version="2.0">

Je profite pour vous rappeler les excellentes présentation d’adiGuba sur :

Vous allez enfin pouvoir écrire des JSP 2.0 tout en utilisant la puissance des EL.

 

Notes

[1] Appelées également JSPX.