Vous êtes sur la page 1sur 76

Java EE : couche prsentation

Technologies utilises pour la


cration des pages web

2015/2016 Jav a Entreprise Edition : JEE 7 1

Plan
Concepts de base pour la cration des pages web
HTML, XHTML, CSS et JavaScript
Les Servlets
Les JavaServer Pages
Le langage dexpression (EL)
Les facelets
Le langage de prsentation (PDL) pour JSF
Cration dinterfaces web avec JSF
Les composants personnaliss

2015/2016 Jav a Entreprise Edition : JEE 7 2

1
Les pages web
Une couche de prsentation sert interagir avec les utilisateurs. Elle
doit tre une interface web qui sexcute sur un navigateur, plus riche,
plus dynamique et plus simple utiliser.
Une application web, affiche gnralement un contenu dynamique :
une liste de livres dun catalogue
Un panier virtuel contenant les articles quon veut acheter.
Le contenu statique change rarement : adresse dun diteur, dessin
vido

Le but de la cration dune page est son affichage dans un navigateur.

Elle doit alors utiliser les langages compris par les navigateurs (HTML,
XHTML, CSS et JavaScript)

2015/2016 Jav a Entreprise Edition : JEE 7 3

Rappel : HTML
Hypertext Markup Language (HTML) est le langage qui domine dans les
pages web.
HTML utilise des balises, ou marqueurs, pour structurer le texte en
paragraphes, listes, liens, boutons, zones de texte, etc.
Une page HTML est un document texte utilis par les navigateurs pour
prsenter du texte et des images : fichiers texte avec lextension .html ou
.htm.
Une page web est forme dun contenu, de balises permettant de changer
certains aspects de ce contenu et dobjets externes comme des images, des
vidos, du code JavaScript ou des fichiers CSS.
Un page HTML valide commence par une balise <html> qui agit comme
conteneur du document. Elle est suivi des balises <head> et <body>.
La balise <body> contient la partie visible. Dans lexemple suivant, le corps
est form dun tableau constitu de labels et de champs de saisie, et un
bouton.
2015/2016 Jav a Entreprise Edition : JEE 7 4

2
Rappel : exemple 1 page HTML
<h1>Create a new book</h1> <tr>
<hr> <td>Description :
<TABLE border=0> <td><textarea name=textarea
cols=20 row s=5></textarea>
<TR>
</tr>
<TD>ISBN :</TD> <TR>
<TD><input type=text/></td> <TD>Number of pages :
</tr> <td><input type=text/>
<tr> </tr>
<tr>
<td>Title :</td>
<td>Illustrations :
<TD><input type=text/></td> <td><input type="checkbox"/>
</tr> </tr>
<tr> </table>
<td>Price : <input type=submit value=Create>
<hr>
<TD><input type=text/>
<i> APress - Beginning Java EE 7 </i>
</tr>

2015/2016 Jav a Entreprise Edition : JEE 7 5

Rappel : exemple page HTML


Le fichier HTML nest pas correctement format en termes de XML :
La page na pas de marqueurs <html>, <head> ou <body>.
Le marqueur <input type=submit value=Create> nest pas ferm.
Les marqueurs mlangent les majuscules et les minuscules (<TR> et
</tr>) .

La plupart des navigateurs autorisent ce type derreur et afficheront


correctement le formulaire.

Mais si on veut traiter ce document avec des parsers XML, le


traitement chouera.
Pour comprendre la raison, tudions la page web qui utilise une
structure XML stricte avec XHTML (eXtensible Hypertext Markup
Language)

2015/2016 Jav a Entreprise Edition : JEE 7 6

3
Rappel : exemple de page HTML

2015/2016 Jav a Entreprise Edition : JEE 7 7

Rappel : XHTML
XHTML a t cre aprs HTML 4.01. Ses racines puisent dans HTML,
mais avec une reformulation en XML strict.

Un document XHTML est donc un document XML qui respecte un


certain schma et peut tre reprsent graphiquement par les
navigateurs.

Un fichier XHTML (dextension .xhtml) peut tre directement utilis


comme du XML ou tre affich dans un navigateur.

Un document XHTML, par rapport HTML, a lavantage de permettre


une validation et une manipulation du document laide doutils XML
standard (XSL ou eXtensible Stylesheet Language; XSLT; etc.)

2015/2016 Jav a Entreprise Edition : JEE 7 8

4
Rappel : exemple 2 de page en XHTML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htm l xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head> <title>Create a new book</title> </head>
<body> <h1>Create a new book</h1>
<hr/> <table border="0">
<tr> <td>ISBN :</td> <td><input type="text"/></td> </tr>
<tr> <td>Title :</td> <td><input type="text"/></td> </tr>
<tr> <td>Price :</td> <td><input type="text"/></td> </tr>
<tr> <td>Description :</td> <td><textarea name="textarea" cols="20"
row s="5"></textarea></td></tr>
<tr> <td>Number of pages :</td> <td><input type="text"/></td> </tr>
<tr> <td>Illustrations :</td> <td><input type="checkbox"/></td> </tr> </table>
<input name=" " type="submit" value="Create"/>
<hr/> <i>APress - Beginning Java EE 7</i> </body> </htm l>
2015/2016 Jav a Entreprise Edition : JEE 7 9

Rappel : XHTML
Les codes des exemples des pages en XHTML et en HTML sont
diffrents.
Le code en XHTML respecte une structure stricte et contient des
marqueurs <html>, <head> et <body>.
Tous les marqueurs sont ferms, mme les vides (chaque <td> est
ferm et on utilise <hr/> au lieu de <hr>)
Les valeurs des attributs sont toujours entre apostrophes ou entre
guillemets (<table border="0"> ou <table border=0> mais pas <table
border=0> ).
Tous les marqueurs sont en minuscules (<tr> au lieu de <TR>).
Le respect strict des rgles syntaxiques de XML et les contraintes de
schma rendent XHTML plus facile maintenir et traiter que HTML,
et cest pourquoi il est le langage prfr pour les pages web.

2015/2016 Jav a Entreprise Edition : JEE 7 10

5
Rappel : exemple 2 de page XHTML

2015/2016 Jav a Entreprise Edition : JEE 7 11

Rappel : CSS
CSS (Cascading Style Sheets) sert dcrire la prsentation dun
document crit en HTML ou en XHTML

Il permet de dfinir les couleurs, les polices, la disposition et les autres


aspects de la prsentation dun document et, donc, de sparer son
contenu (crit en XHTML) de sa prsentation (crite en CSS).

Par exemple, si on veut modifier les labels de lexemple 2 pour quils


soient tous en italique (font-style: italic;),de couleur bleue (color:
#000099;) et dans une taille de police plus grande (font-size: 22px;).

Au lieu de rpter ces modifications pour chaque marqueur, il suffit de


dfinir un style CSS (dans un marqueur <style type="text/css">) et de lui
donner un alias (row, par exemple) : la page appliquera alors ce style
pour tous les lments qui utilisent cet alias (<td class="row">).

2015/2016 Jav a Entreprise Edition : JEE 7 12

6
Rappel : exemple 3 de page CSS
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head> <title>Creates a new book</title>
<style type="text/css">
body { font-family: Arial, Helvetica, sans-serif;}
table { border: 0; }
h1 { font-size: 22px; color: blue; font-style: italic; }
.row { font-style: italic; }
</style>
</head>
<body> <h1>Create a new book</h1>
<hr/>
<table>
<tr> <td class="row">ISBN :</td> <td><input type="text"/></td></tr>

2015/2016 Jav a Entreprise Edition : JEE 7 13

Rappel : exemple 3 de page CSS


<tr> <td class="row">Title :</td> <td><input type="text"/></td> </tr>
<tr> <td class="row">Price :</td> <td><input type="text"/></td> </tr>
<tr> <td class="row">Description :</td> <td><textarea name="textarea" cols="20"
row s="5"></textarea></td> </tr>
<tr> <td class="row">Number of pages :</td> <td><input type="text"/></td> </tr>
<tr> <td class="row">Illustrations :</td> <td><input type="checkbox"/></td> </tr>
</table>
<input name=" " type="submit" value="Create"/>
<hr/>
<i>APress - Beginning Java EE 7</i>
</body>
</html>

2015/2016 Jav a Entreprise Edition : JEE 7 14

7
Rappel : exemple 3 de page CSS

2015/2016 Jav a Entreprise Edition : JEE 7 15

Rappel : CSS
Dans lexemple 3, le code CSS est intgr la page XHTML mais,
dans une vraie application, tous les styles seraient placs dans un
fichier distinct qui serait import par la page web.

Le concepteur du web, peut ainsi crer un ou plusieurs fichiers CSS


pour diffrents groupes de pages.

Linterprtation du code de lexemple 3 par un navigateur, affiche tous


les labels en italique et le titre en beu.

2015/2016 Jav a Entreprise Edition : JEE 7 16

8
Rappel : DOM
Une page XHTML est un document XML et a donc une
reprsentation DOM (Document Object Model).
DOM est une reprsentation arborescente de la structure
dun document.
La figure ci-joint montre une reprsentation DOM de la page
XHTML : la racine est le marqueur html, ses deux fils sont
head et body et ce dernier lui-mme un fils table.
DOM fournit un moyen standard dinteraction avec les
documents XML.
On peut parcourir larbre dun document et modifier le
contenu dun nud.
En utilisant JavaScript, il est possible dajouter un
comportement dynamique une page web.
Note : installez DOM Inspector pour Firefox ou utilisez
Netbeans partir de 6.9 ou plus
2015/2016 Jav a Entreprise Edition : JEE 7 17

Rappel : JavaScript
Pour crer un contenu dynamique, on utilise les technologies ct serveur JSP
ou JSF, mais on peut en produire ct client (navigateur) en excutant du code
JavaScript.
JavaScript est un langage de script pour le dveloppement web ct client.
Cest un langage interprt et faiblement typ, il na rien voir avec Java.
Il est possible de crer des applications web dynamiques en crivant des
fonctions qui agissent sur le DOM dune page.
On ajoute du code JavaScript lexemple 3 prcdent. Ainsi, le prix du livre doit
tre fourni par lutilisateur ct client avant datteindre le serveur : une fonction
JavaScript (priceRequired()) permet de valider ce champ en testant sil est vide
ou non.
Cette fonction est intgre dans la page au moyen dun marqueur <script> et est
appele lorsque le champ de saisie perd le focus (reprsent par lvnement
onblur).

2015/2016 Jav a Entreprise Edition : JEE 7 18

9
Rappel : exemple 4 en JavaScript
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Creates a new book</title>
<script type="text/javascript">
function priceRequired() {
if (document.getElementById("price").value == "") {
document.getElementById("priceError").innerHTML = "Please, fill the price !";
}
}
</script>
</head>

2015/2016 Jav a Entreprise Edition : JEE 7 19

Rappel : exemple 4 en JavaScript


<body>
<h1>Create a new book</h1>
<hr/><table border="0">
<tr> <td>ISBN :</td> <td><input type="text"/></td> </tr>
<tr> <td>Title :</td> <td><input type="text"/></td> </tr>
<tr> <td>Price :</td> <td><input id="price" type="text"
onblur="javascript:priceRequired()"/> <span id="priceError"/> </td> </tr>
<tr> <td>Description :</td> <td><textarea name="textarea" cols="20"
row s="5"></textarea></td> </tr>
<tr> <td>Number of pages :</td> <td><input type="text"/></td> </tr>
<tr> <td>Illustrations :</td> <td><input type="checkbox"/></td> </tr>
</table>
<input name="" type="submit" value="Create"/>
<hr/>
<i>APress - Beginning Java EE 7</i>
</body> </html>
2015/2016 Jav a Entreprise Edition : JEE 7 20

10
Rappel : exemple en JavaScript
La fonction (priceRequired()) utilise lobjet document implicite qui
reprsente le DOM du document XHTML.
Lappel getElementById("price") recherche un lment ayant un
identifiant price(<input id="price">) :on rcupre sa valeur et lon teste
selle est vide. Si cest le cas, la fonction recherche un autre lment
appel priceError(getElementById("priceError")) et fixe sa valeur
"Please, fill the price ! ".
JavaScript est un langage puissant : nous nen avons prsent quune
partie pour montrer son interaction avec DOM.
Une fonction JavaScript peut accder un nud de la page et
modifier dynamiquement son contenu ct client.
La validation du formulaire vide de lexemple 4 affichera le message
suivant :

2015/2016 Jav a Entreprise Edition : JEE 7 21

Rappel : exemple en JavaScript

2015/2016 Jav a Entreprise Edition : JEE 7 22

11
Les servlets : introduction
Les servlets sont au serveur web ce que les applets sont aux
navigateurs pour le client.
Les servlets sont des applications java cot serveur, comme les
CGI, ASP ou PHP.
Les servlets permettent de grer des requtes HTTP et
fournissent au client une rponse HTTP dynamique.

2015/2016 Jav a Entreprise Edition : JEE 7 23

Les servlets : fonctionnement

Une Servlet est un programme Java qui lit les donnes envoyes par
un client web et elle gnre un rsultat.
Les donnes sont envoyes des formulaires ou des enttes des
requtes.
Lors de la cration dune rponse, une servlet :
peut utiliser toutes les fonctions du langage Java
peut communiquer avec des ressources externes (fichiers, BD, ...) et/ou
dautres applications

2015/2016 Jav a Entreprise Edition : JEE 7 24

12
Avantage des servlets par rapport aux CGI

Portabilit : indpendante systme exploitation et des serveurs web

Efficacit : semi compile, multithread (plutt que des processus pour


les CGI), gestion du cache, connexions persistantes

Puissance : communication bidirectionnelle avec le serveur web,


partage de donnes entre servlets, chanage de servlets, servlet
modifie peut tre ractive sans redmarrage du serveur
Modularit : possibilit davoir plusieurs servlets, chacune pouvant
accomplir une tche spcifique

Pratique : gestion des cookies, suivi des sessions, manipulation


simple du protocole HTTP, peut dialoguer avec applets cot client via
RMI

2015/2016 Jav a Entreprise Edition : JEE 7 25

Les technologies

2015/2016 Jav a Entreprise Edition : JEE 7 26

13
Package Servlet

LAPI pour les servlets est constitue de deux packages :


javax.servlet : package gnrique
javax.servlet.http : package spcifique pour les servlets HTTP

2015/2016 Jav a Entreprise Edition : JEE 7 27

API des servlets

2015/2016 Jav a Entreprise Edition : JEE 7 28

14
API servlet
l'API Servlet fournit
deux classes qui
proposent dj une
implmentation:
GenericServlet :
pour la
conception de
Servlets
indpendantes
du protocole
HttpServlet : pour
la conception de
Servlets
spcifiques au
protocole HTTP

2015/2016 Jav a Entreprise Edition : JEE 7 29

Fonctionnement d'une servlet

Lorsqu'une servlet est appele par un client, la mthode


service() est excute. Celle-ci est le principal point d'entre de
toute servlet et accepte deux objets en paramtres :
l'objet ServletRequest encapsulant la requte du client, c'est--
dire qu'il contient l'ensemble des paramtres passs la
servlet (informations sur l'environnement du client, cookies du
client, URL demande, ...)
l'objet ServletResponse permettant de renvoyer une rponse
au client (envoyer des informations au navigateur). Il est ainsi
possible de crer des en-ttes HTTP (headers), d'envoyer des
cookies au navigateur du client, ...

2015/2016 Jav a Entreprise Edition : JEE 7 30

15
Dvelopper une servlet
Afin de dvelopper une servlet fonctionnant avec le protocole HTTP, il suffit
de crer une classe tendant HttpServlet.
La classe HttpServlet (drivant de GenericServlet) permet de fournir une
implmentation de l'interface Servlet spcifique HTTP.
La classe HttpServlet surcharge la mthode service en lisant la mthode
HTTP utilise par le client, puis en redirigeant la requte vers une mthode
approprie.
Les deux principales mthodes du protocole HTTP tant GET et POST, il
suffit de surcharger la mthode adquate afin de traiter la requte :
Si la mthode utilise est GET, il suffit de redfinir la mthode
public void doGet(HttpServletRequest req, HttpServletResponse res);
Si la mthode utilise est POST, il suffit de redfinir la mthode
public void doPost(HttpServletRequest req, HttpServletResponse res);

2015/2016 Jav a Entreprise Edition : JEE 7 31

Servlet web : HttpServlet


Une servlet HTTP doit hriter de la classe HttpServlet oriente dveloppement
Web.
La classe HttpServlet possde des mthodes :
init(ServletConfig) : excute au chargement de la servlet
doGet(HttpServletRequest, HttpServletResponse) : excute chaque
connexion dun navigateur (demande ressource)
doPost(HttpServletRequest, HttpServletResponse) : excute chaque
validation de formulaire (modifie la ressource)
destroy() : excute lors de larrt du serveur
Les mthodes doGet(), doPost(), doPut(), doDelete(), doHead(),
doOptions() et doTrace() utilisent des objets HttpServletRequest et
HttpServletResponse passs en paramtres .
service.getLastModified() : vrifie si le contenu dlivr par la servlet a
chang

2015/2016 Jav a Entreprise Edition : JEE 7 32

16
Lire la requte : HttpServletRequest
Dans la mthode doXXX() (doGet() ou doPost() selon la mthode invoque) la
requte de l'utilisateur est passe en paramtres sous forme HttpServletRequest
Les requtes sont transmises du client au serveur par le protocole HTTP.
les diffrentes mthodes de HttpServletRequest :
String getMethod() : rcupre la mthode HTTP utilise par le client
String getHeader(String Key) :rcupre la valeur de l'attribut Key de l'en-tte
String getRemoteHost() : rcupre le nom de domaine du client
String getRemoteAddr() : rcupr l'adresse IP du client
String getParameter(String Key) : rcupre la valeur du paramtre Key (cl) d'un
formulaire. Lorsque plusieurs valeurs sont prsentes, la premire est retourne
String[] getParameterValues(String Key) : rcupre les valeurs correspondant au
paramtre Key (cl) d'un formulaire, c'est--dire dans le cas d'une slection multiple
(cases cocher, listes choix multiples) les valeurs de toutes les entits slectionnes
Enumeration getParameterNames() : retourne un objet Enumration contenant la liste
des noms des paramtres passs la requte
String getServerName() : rcupre le nom du serveur
2015/2016
String getServerPort() : rcupre le numro de port du serveur
Jav a Entreprise Edition : JEE 7 33

Crer la rponse : HttpServletResponse

La rponse fournir l'utilisateur est reprsente sous forme d'objet


HttpServletResponse.
Les diffrentes mthodes de l'objet HttpServletResponse sont :
String setStatus(int StatusCode) : dfinit le code de retour de la rponse
void setHeader(String Nom, String Valeur) : dfinit une paire cl/valeur dans les en-
ttes
void setContentType(String type) : dfinit le type MIME de la rponse HTTP, c'est--
dire le type de donnes envoyes au navigateur
void setContentLength(int len) : dfinit la taille de la rponse
PrintWriter getWriter() : retourne un objet PrintWriter permettant d'envoyer du texte au
navigateur client. Il se charge de convertir au format appropri les caractres Unicode
utiliss par Java
ServletOutputStream getOutputStream() : dfinit un flot de donnes envoyer au
client, par l'intermdiaire d'un objet ServletOutputStream, driv de la classe
java.io.OutputStream
void sendredirect(String location) : permet de rediriger le client vers l'URL location

2015/2016 Jav a Entreprise Edition : JEE 7 34

17
Servlet : cycle de vie

Un client met une requte


destine une servlet
Le serveur charge et excute
les classes Java qui gnrent
des informations
Le serveur retourne les
informations au client
Les tats d'une servlet. Le
passage d'un tat un autre
est automatique et est fait
par le conteneur de servlets.

2015/2016 Jav a Entreprise Edition : JEE 7 35

Servlet : cycle de vie


Une fois charge en mmoire dans le moteur (conteneur) de servlets
(i.e. la JVM), le conteneur lance la mthode service() chaque
requte.
Les trois mthodes :
public void init(),
public void service(),
public void destroy()
sont dfinies dans la classe abstraite javax.servlet.GenericServlet.
La mthode service(...) contient deux paramtres qui modlisent la
requte et la rponse

2015/2016 Jav a Entreprise Edition : JEE 7 36

18
HttpServlet : exemple 1
package mypkg;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Etape 1. Spcifier le type MIME du contenu de la rponse
response.setContentType("text/html");
// Etape 2. Rcupre le PrintWriter pour envoyer des donnes au client
PrintWriter out = response.getWriter();
// Step 3. Envoyer linformation au client
out.println("<html>");
out.println("<head><title>Hello Servlet</title></head>");
out.println("<body>");
out.println("<h1> Hello tous les tudiants !</h1>");
out.println("Il est : " + new java.util.Date());
out.println("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request, response);
} }
2015/2016 Jav a Entreprise Edition : JEE 7 37

Manipulation manuelle de
Tomcat
On lance le serveur web Tomcat
La servlet compile est range
sous
REP_INSTAL_TOMCA T\ webapp
s\helloServlet\WEBINF\classes
correspond l'URL :
http://localhost:8080/helloServlet/
sayHello
Mettre jour web.xml

2015/2016 Jav a Entreprise Edition : JEE 7 38

19
Web.xml
Le fichier web.xml du rpertoire WEB-INF de l'application web
configure l'application web.
L'lment <servlet> associe un nom une classe Java servlet
L'lment <servlet-mapping> associe ce nom l'URL relative qui
permet d'atteindre cette servlet.
<servlet>
<servlet-name> HelloServlet </servlet-name>
<servlet-class> mypkg.HelloServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern> /sayhello </url-pattern>
</servlet-mapping>
2015/2016 Jav a Entreprise Edition : JEE 7 39

Fichier de description : web.xml

2015/2016 Jav a Entreprise Edition : JEE 7 40

20
Entte du Web.xml
Syntaxe de " web.xml " en servlet 3.0 (Tomcat 7 et Glassfish 3.1 ) :

Alors que sa syntaxe en servlet 2.5 (Tomcat 6 and Glassfish 3) :

2015/2016 Jav a Entreprise Edition : JEE 7 41

Exemple 1 : excution

2015/2016 Jav a Entreprise Edition : JEE 7 42

21
HttpServlet : exemple 2
//Source Code for RequestInfo Example
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestInfo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
IOException, ServletException {
response.setContentType(" text/html ");
PrintWriter out = response.getWriter();
out.println(" <html> ");
out.println(" <body> ");
out.println(" <head> ");
out.println(" <title>Request Information Example</title> ");
out.println(" </head> ");
out.println(" <body> ");
out.println(" <h3>Request Information Example</h3> ");
out.println(" Method: " + request.getMethod());
out.println(" Request URI: " + request.getRequestURI());
out.println(" Protocol: " + request.getProtocol());
out.println(" PathInfo: " + request.getPathInfo());
out.println(" Remote Address: " + request.getRemoteAddr());
out.println(" </body> "); out.println(" </html> ");
}
/** We are going to perform the same operations for POST requests as for GET methods,
so this method just sends the request to the doGet method. */
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException { doGet(request, response);
}}

2015/2016 Jav a Entreprise Edition : JEE 7 43

Exemple 2 :excution

2015/2016 Jav a Entreprise Edition : JEE 7 44

22
Servlet : exemple 3
Chaque servlet n'est instancie quune seule fois
Do la persistance de ses donnes entre 2 invocations
public class CompteurServlet extends HttpServlet {
int compteur = 0;
public void service( HttpServletRequest request,
HttpServletResponse response )
throws ServletException, IOException {
response.setContentType( "text/html" );
PrintWriter out = response.getWriter();
out.println( "<html><body>" );
out.println( "<h1> "+ " Compteur = "+compteur++ + "</h1>" );
out.println( "</body></html>" );
}}

2015/2016 Jav a Entreprise Edition : JEE 7 45

Exemple 3 : excution

2015/2016 Jav a Entreprise Edition : JEE 7 46

23
Atelier 1 : servlet

Les tapes pour construire un exemple


de servlet en utilisant Eclipse Juno et
tomcat 7.0

2015/2016 Jav a Entreprise Edition : JEE 7 47

Tomcat

Un conteneur web (web container) J2EE


Implmentation Java de rfrence
Serveur open-source gratuit et multiplateformes(crit en
Java)
Tlchargeable sur : http://jakarta.apache.org/tomcat
Tomcat utilise la variable denvironnement JAVA_HOME qui dsigne
le dossier dinstallation du JDK.
Eclipse / window / prfrences :
Tomcat: choisir version 7.x, rpertoire dinstallation de Tomcat, un fichier
par contexte,
Rep_tomcat\conf\catalina\localhost

2015/2016 Jav a Entreprise Edition : JEE 7 48

24
Vrification de linstallation

Si tout sest bien pass, en tapant http://localhost:8080/ dans le


navigateur on obtient :

2015/2016 Jav a Entreprise Edition : JEE 7 49

Pilotage de Tomcat partir declipse

Prciser Eclipse le rpertoire dinstallation de Tomcat :


Prfrences->Server->Installed Runtimes :
(Par exemple C:\repInstal\Apache Software Foundation\Tomcat 7.0)
Piloter tomcat partir dEclipse :
Afficher la vue 'Serveurs' : menu Fentre->Afficher la vue->Autre...,
puis Serveur->Serveurs.
Dans la vue 'Serveurs' menu contextuel :

2015/2016 Jav a Entreprise Edition : JEE 7 50

25
Cration dun projet web

Menu contextuel de la vue 'Explorateur de projet', ensuite cration de


projet Web dynamique.

2015/2016 Jav a Entreprise Edition : JEE 7 51

Dveloppement dune servlet


Cration dune servlet : menu contextuel
associ au projet Web, dans ce menu
choisir 'Nouveau->Servlet
Saisir le nom du package et le nom de
classe de la servlet
Dans ltape suivante

2015/2016 Jav a Entreprise Edition : JEE 7 52

26
Servlet et formulaire
Un formulaire peut envoyer des informations une servlet:
Mettre le nom de la servlet qui va recevoir les informations en tant que valeur de
l'attribut Action de la balise Form,
Spcifier la mthode HTTP dsire grce l'attribut Method.
Les donnes sont envoyes l'aide de la mthode spcifie (GET par dfaut)
aprs que l'utilisateur clique sur un bouton de type Sub mit
Exemple : formulaire en HTML qui envoie des infos la servlet Parametres :
<FORM Method="POST"
Action="http://localhost:8080/monprojet1/Parametres">
Nom : <INPUT type=text size=20 name=nom><BR>
Prnom : <INPUT type=text size=20 name=prenom><BR>
Age : <INPUT type=text size=2 name=age><BR>
<INPUT type=submit value=Envoyer>
</FORM>
2015/2016 Jav a Entreprise Edition : JEE 7 53

Envoie par la mthode get


Chaque lment du formulaire doit possder un nom unique.
La valeur et le nom de l'lment forme une paire nom/valeur du type :
Nom_de_l_element = valeur_element
L'ensemble des paires nom/valeur sont spares par des ET ("&").
champ1=valeur1&champ2=valeur2&champ3=valeur3
L'envoi de cette chane se fera diffremment selon que la mthode utilise pour
l'envoi du formulaire est GET ou POST.
La mthode GET : envoie les lments du formulaire au travers de l'URL, en
ajoutant l'ensemble des paires nom/valeur l'URL, spar dun point
d'interrogation, ce qui donne une URL du type :
http://serveur/cgi-bin/script.cgi?champ1=valeur1&champ2=valeur2...
La longueur de lURL tant limite 255 caractres, les informations situes au -
del de cette limite seront perdues.
De plus, cela cre une URL surcharge dans la barre d'adresse d'un navigateur
et peut dvoiler des informations sensibles comme un mot de passe...
2015/2016 Jav a Entreprise Edition : JEE 7 54

27
Envoie par la mthode post
La mthode POST : est une bonne alternative la mthode GET.
Cette mthode code les informations de la mme faon que la
mthode GET (encodage URL et paires nom/valeur)
mais elle envoie les donnes la suite des en-ttes HTTP, dans un
champ appel corps de la requte.
De cette faon la quantit de donnes envoyes n'est plus limite, et
est connue du serveur grce l'en-tte permettant de connatre la
taille du corps de la requte.

2015/2016 Jav a Entreprise Edition : JEE 7 55

Lecture des paramtres avec une


servlet
L'un des points forts des servlets est la possibilit de traiter
("parser") les donnes en provenance de formulaires.
L'objet HttpServletRequest possde de nombreuses mthodes (la
plus courante getParameter()) permettant de retourner la valeur d'un
champ du formulaire, qu'il s'agisse de donnes passes par POST
ou GET.
La mthode getParameter() : permet de retourner le valeur d'un
champ dont on a pass le nom en argument :
public String getParameter(String Key)
Les noms des champs sont sensibles la casse. Si le champ est
vide, une chane vide est retourne. Si le champ n'existe pas, la
valeur null est retourne.

2015/2016 Jav a Entreprise Edition : JEE 7 56

28
Formulaire et servlet
Un formulaire comportant une entre comme suit :
<Input type="text" name="NomDuChamp"> sera trait dans la servlet
de cette faon : String Champ = req.getParameter("NomDuChamp")
La mthode getParameterValues() : un champ ayant plusieurs
valeurs (liste choix multiples, cases cocher, ...).
public String[] getParameterValues(String Key) : retourne l'ensemble
des valeurs affectes la cl spcifie en paramtre.
La mthode getParameterNames() : donne l'ensemble des noms
des champs du formulaire pass la servlet.
Enumeration getParameterNames() : Lobjet Enumeration, contient la
liste des champs du formulaire.
Chaque entre peut tre traduite en chane, puis la traiter avec
getParameter() afin de rcuprer sa valeur.
2015/2016 Jav a Entreprise Edition : JEE 7 57

Formulaire et servlet : exemple


package com.p;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;
import java.util.*;
public class Parametres extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>\n" +"<h1>Tableau des paramtres</h1>\n" +
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n" +"<tr>\n" +
"<th>Nom</th><th>Valeur(s)</th>");
Enumeration NomsParam = request.getParameterNames();
while(NomsParam.hasMoreElements()) {
String NomParam = (String)NomsParam.nextElement();
out.println("<tr>"); out.print("<td>" + NomParam + "</td>");
String[] ValeursParam = request.getParameterValues(NomParam);
if (ValeursParam.length == 1) {
String ValeurParam = ValeursParam[0];
2015/2016 Jav a Entreprise Edition : JEE 7 58

29
Formulaire et servlet : exemple
if (ValeurParam.length() == 0)
out.println("<td><b>Aucune valeur</i></td>");
else{ out.print("<td>"+ValeurParam+ "</td>"); out.println("</tr>");}
}
else { out.println("<td><ul>");
for(int i=0; i < ValeursParam.length; i++) {
out.println("<tr>" + ValeursParam[i] + "</tr>"); }
out.println("</ul></td>");}
}
out.println("</table>\n</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request, response); }
}
2015/2016 Jav a Entreprise Edition : JEE 7 59

Servlet et formulaire
Dans monprojet1 crer new file formulaire.html et lancer
http://localhost:8080/monprojet1/formulaire.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Formulaire - saisie</title>
</head>
<body>
<FORM Method="POST" Action="Parametres">Nom : <INPUT type=text
size=20 name=nom><BR>
Prnom : <INPUT type=text size=20 name=prenom><BR>
Age : <INPUT type=text size=2 name=age><BR>
<INPUT type=submit value=Envoyer></FORM>
</body>
</html>
2015/2016 Jav a Entreprise Edition : JEE 7 60

30
Servlet et formulaire : resultat

2015/2016 Jav a Entreprise Edition : JEE 7 61

Java server Pages


JSP est n en 1999 avec J2EE 1.2 et permet de crer dynamiquement
des pages web en rponse une requte dun client.
Les pages JSP ressemblent des pages HTML ou XHTML, sauf quelles
contiennent des marqueurs spciaux pour effectuer des traitements sur
le serveur et appeler du code java ct serveur.
Les pages sont traites sur le serveur et compiles sous forme de
servlets.
Les servlets ont t cres pour permettre un serveur daccepter des
requtes HTTP des clients et de crer des rponses dynamiques.
Les servlets et les JSP peuvent se servir de nimporte quelle ressource
serveur comme les EJB, les BDs, les services web,
Les JSP sont dynamiques car elles excutent du code Java pour former
une rponse en fonction dune requte.

2015/2016 Jav a Entreprise Edition : JEE 7 62

31
Java server Pages
Les JSP sexcutent sur un serveur dans un conteneur de servlets et
rpondent aux requtes des clients en utilisant le protocole HTTP.

Le conteneur de servlets gre le cycle de vie dune JSP en :


Compilant le code JSP dans une servlet;
Chargeant et initialisant la JSP;
Traitant les requtes des clients et les faisant suivre la JSP;
Renvoyant les rponses aux clients (ces rponses sont de type HTML ou
XHTML);
Dchargeant la JSP et arrtant de lui envoyer des requtes.
Une JSP peut soit produire du code HTML, elle doit donc utiliser lextension
.jsp, ou produire du code XHTML et elle doit porter lextension .jspx.

2015/2016 Jav a Entreprise Edition : JEE 7 63

Java server Pages


<html>
<head>
<title>List all the books</title>
</head>
<body>
<h1>Lists all the books</h1>
<hr/>
</body>
</html>
Exemple de JSP ne contenant que du HTML, elle peut contenir aussi des
composants supplmentaires pour crer un contenu dynamique.
La spcification JSP dfinit les lments suivants : directives, scripts et actions
Il existe deux syntaxes pour ces lments : la syntaxe XML pour les pages
XHTML (<jsp:directive attributs />) et la syntaxe JSP, qui nest pas conforme
XML (<%@ directive attributs %>)

2015/2016 Jav a Entreprise Edition : JEE 7 64

32
JSP : directives
Les directives fournissent des informations sur la JSP et ne produisent rien.
Il existe trois directives : page, include et taglib. Deux syntaxes sont possibles:
<%@ directive attributs %> ou <jsp:directive attributs />

La directive page sert indiquer les attributs de page : langage de


programmation (java), le type MIME, lencodage des caractres de la rponse,..
<%@ page contentType=" text/html;ISO-8859-1 " language= "java" %> ou
<jsp:directive.page contentType=" text/html;ISO-8859-1 " language= "java" />

La directive include sert inclure une autre page (HTML, XHTML ou JSP) dans
la page courante. On lutilise pour inclure une page standard (entte ou pied de
page) dans plusieurs JSP.
<%@ include file= "header.jsp" %> ou
<jsp:directive.include file= " header.jsp " />

2015/2016 Jav a Entreprise Edition : JEE 7 65

JSP : directives
La directive taglib dclare quune page utilise lune des bibliothques
standards en lidentifiant de faon unique par une URI et un prfixe.

Avec la syntaxe XML, ces deux informations sont regroupes dans un


espace de noms unique (xmlns).

Dans lexemple suivant, la bibliothque de marqueurs


http://java.sun.com/jstl/core est disponible pour la page via le prfixe c :

<%@ taglib uri= "http://java.sun.com/jstl/core " prefix= "c" % >


<jsp:root xmlns:c= "http://java.sun.com/jstl/core " >

2015/2016 Jav a Entreprise Edition : JEE 7 66

33
JSP : scripts
Les scripts contiennent du code java qui permet de manipuler des
objets et deffectuer des traitements affectant le contenu.
Les scripts utilisent les deux syntaxes suivantes :
<%! dclaration %>
<jsp:declaration> ceci est une dclaration </jsp:declaration>
<% scriptlet %>
<jsp:scriptlet>ceci est un scriptlet</jsp:scriptlet>
<% = expression %>
<jsp:expression> ceci est une expression </jsp:expression>
Les dclarations permettent de dclarer les variables ou les mthodes
qui seront disponibles pour tous les autres scripts de la page.
La dclaration napparait que dans la JSP traduite (c.--d. servlet), pas
dans ce qui est envoy au client.

2015/2016 Jav a Entreprise Edition : JEE 7 67

JSP : scripts
Exemple linstance ArrayList sera globale toute la page :
<%! ArrayList books=new ArrayList(); %>
<jsp:declaration> ArrayList books=new ArrayList(); </jsp:declaration>

Les scriptlets contiennent du code java pour dcrire les actions raliser en
rponse aux requtes. Ils peuvent effectuer des itrations ou des conditions
dautres lments de la JSP. Le code dun scriptlet napparat que dans la JSP
traduite (la servlet).
Lexemple suivant ajoute un objet book lArrayList davant :

<% books.add(new Book("H2G2",12f, "Scifi IT book", "1234-234",241,true )); %>


<jsp:scriptlet> books.add(new Book("H2G2",12f, "Scifi IT book", "1234-
234",241,true )); </jsp:scriptlet>

2015/2016 Jav a Entreprise Edition : JEE 7 68

34
JSP : scripts
Les expressions servent envoyer la valeur dune expression java au client.
Elles sont values au moment de la rponse et leur rsultat est converti en
chaine de caractres puis insr dans le flux affich par le navigateur.
Lexemple suivant affiche lISBN dun livre :
<%=book.getIsbn()%> ou <jsp:expression>book.getIsbn()</jsp:expression>
Les dclarations, les scriptlets et les expressions doivent contenir du code
java correct. La syntaxe XML doit tre respecte aussi.
Exemple : <%! ArrayList<Book> books=new ArrayList<Book>();%>
dclare une ArrayList de livres en utilisant une classe gnrique.
En XML : on doit pas utilis les symboles < et > rservs louverture et la
fermeture des marqueurs mais une section CDATA (character DATA) afin
que le parser XML ne tente pas de lanalyser :
< jsp:declaration ><![CDATA[
ArrayList<Book> books=new ArrayList<Book>();] ]></jsp:declaration>

2015/2016 Jav a Entreprise Edition : JEE 7 69

JSP : actions
Les actions sont dfinies par la spcification JSP et forcent la page effectuer
certaines actions :inclure des ressources externes, faire suivre une requte vers
une autre page, utiliser les proprits dobjets java

Ces action ressembles des marqueurs HTML car elles sont reprsentes par
des lments XML prfixs par jsp : <jsp:useBean>, <jsp:include>, etc.

Les actions disponibles sont :


useBean : associe une instance dobjets une porte donne et un
identifiant.
setProperty : fixe la valeur dune proprit dun bean.
getProperty : affiche la valeur dune proprit dun bean.
include : permet dinclure des ressources statiques et dynamiques dans le
mme contexte que celui de la page courante.

2015/2016 Jav a Entreprise Edition : JEE 7 70

35
JSP : actions
forward : fait suivre la requte courante une ressource statique ou
une servlet dans le mme contexte que celui de la page courante.
param : utilis avec les lments include, forward et params. La page
incluse ou transfre verra lobjet requte initial avec les paramtres
originaux, plus les nouveaux.
plugin : permet une JSP de produire du HTML contenant des
constructions spcifiques au navigateur (OBJECT ou EMBED), qui
provoquera le tlchargement dune extension.
params : passe des paramtres. Fait partie de laction plugin.
element : dfinit dynamiquement la valeur du marqueur dun lment
XML.
attribute : dfinit un attribut XML. Fait partie de laction element.
body : dfinit le corps dun lment XML. Fait partie de laction
element

2015/2016 Jav a Entreprise Edition : JEE 7 71

JSP : application
titre dapplication, on va crer une page qui affichera une liste de
livres stocks dans une ArrayList (sans utiliser une base de donnes).
LArrayList est initialise avec un nombre donn dobjets Book, et
parcourue pour afficher les attributs de chaque livre (isbn, titre, )
comme dans la figure suivante :

2015/2016 Jav a Entreprise Edition : JEE 7 72

36
JSP : application
Pour construire cette page, nous avons besoin de plusieurs lments :
Il faut importer les classes Arraylist et Book :
<%@ page im port= " fsr.ac.Book" %>
<%@ page im port="java.util.ArrayList" %>
Dclarer un attribut books pour quil soit accessible toute la page :
<%! ArrayList<Book> books = new ArrayList<Book>();%>
Un scriptlet ajoute des livres dans books et un autre parcourt cette liste avec for.
Pour afficher les attributs dun livre, on utilise lexpression :<%= book.getTitle()%>
Dans le code il y a du java, HTML et du texte. Tout ce qui est dans un scriptlet
(entre <% et %>) est du code java qui sera excut sur le serveur. Le reste cest
du texte qui sera affich dans la page de rponse.
Une JSP devient vite difficile lire avec un tel mlange. En plus, il n y a pas de
sparation entre la logique mtier et la prsentation.
Ce mlange de java (dveloppeur mtier) et le XHTML (concepteur web)
complique la maintenance
2015/2016 Jav a Entreprise Edition : JEE 7 73

JSP : application
<%@ page import="fsr.ac.Book" %>
<%@ page import="java.util.ArrayList" %>
<%! ArrayList<Book> books = new ArrayList<Book>(); %>
<html> <head> <title>List all the books</title> </head>
<body> <h1>Lists all the books</h1> <hr/>
<% books.add(new Book("H2G2", 12f, "Scifi IT book", "1234-234", 241, true));
books.add(new Book("Robots", 18.5f, "Best seller", "564-694", 317, true));
books.add(new Book("Dune", 23.25f, "The trilogy", "256-6-56", 529, true));%>
<table border="1">
<tr> <th>ISBN</th> <th>Title</th> <th>Price</th> <th>Description</th>
<th>Number of pages</th> <th>Illustrations</th> </tr>
<% Book book;
for (int i = 0; i < books.size(); i++) { book = books.get(i); %>
<tr> <td><%= book.getIsbn()%> </td> <td><%= book.getTitle()%> </td>
<td><%= book.getPrice()%> </td> <td><%= book.getDescription()%> </td>

2015/2016 Jav a Entreprise Edition : JEE 7 74

37
JSP : application
<td><%= book.getNbOfPage()%> </td>
<td><%= book.getIllustrations()%> </td>
</tr>
<%
} // fin du for
%>

</table>
<hr/>
<i> Partie du cours Java EE 7</i>
</body>

2015/2016 Jav a Entreprise Edition : JEE 7 75

Langage dexpressions (EL)


Depuis la version 2.0 des JSP, il est possible de placer n'importe quel
endroit d'une page JSP des expressions qui sont values et
remplaces par le rsultat de leur valuation : les Expressions
Languages (EL) .
Elles permettent de manipuler les donnes au sein d'une page JSP plus
simplement qu'avec les scriptlets Java ( <% %>).
Utilises conjointement avec des librairies de tags (telles que les JSTL que
nous verrons plus tard), elles permettent de se passer totalement des
scriptlets.
Une EL permet galement d'accder simplement aux beans des
diffrents scopes de l'application web (page, request, session et
application).
Elles permettent galement dafficher les valeurs de variables et disposent
de nombreux oprateurs mathmatiques, logiques et relationnels.

2015/2016 Jav a Entreprise Edition : JEE 7 76

38
Langage dexpressions (EL)
La syntaxe de base dune instruction EL est de la forme :
${expr} o expr est une expression valide qui peut tre
analyse et interprte. partir de JSP 2.1 on peut aussi
utiliser la syntaxe : #{expr}
La chane expr correspond l'expression interprter. Une
expression peut tre compose de plusieurs termes
spars par des oprateurs.
Exemple :
${ (5 + 2)*2 } => 14
${ a && b } => a ET b
Ou, avec les beans: ${bean.property}

2015/2016 Jav a Entreprise Edition : JEE 7 77

Langage dexpressions (EL)


Les expressions EL peuvent utiliser la plupart des oprateurs java habituels :
Arithmtiques :+, -, *, / (div), %(mod);
Relationnels : ==, !=, <, >, <=, >=;
Logiques :&&, | |, !
Autres : ( ), empty, [ ],
Note : certains oprateurs ont la fois une forme symbolique et littrale :
(< est quivalent lt, / div,) ce qui permet de rendre une JSP conforme
XML (par exemple : #{2<3} peut tre reprsente par #{2 lt 3}).
Loprateur empty teste si un objet est null ou sil rfrence un String, List,
Map ou tableau null : #{empty book} ou #{empty book.isbn}.
Loprateur point permet daccder un attribut dun objet. Il est aussi
possible dutiliser loprateur [ ] : #{book.isbn} ou #{book[isbn] }.
EL 2.2 permet dappeler des mthodes : #{book.buy(EURO) }

2015/2016 Jav a Entreprise Edition : JEE 7 78

39
Langage dexpressions (EL)
Les diffrents termes peuvent tre :
Un type primaire (null, Long, Double, String, Boolean, )
Un objet implicite (requestScope, sessionScope, param, paramValues,
header, headerValues, )
Un attribut d'un des scopes de l'application. Cet attribut pouvant tre
stock dans nimporte quel scope (page, request, session ou
application).
LEL cherchera dans tous les scopes dans cet ordre. On a donc :
${name} <%= pageContext.findAttribute("name"); %>
Il est conseill de n'utiliser cette forme que pour accder aux objets du scope
page, afin d'viter d'ventuels conflits.
Pour les autres scopes, il est prfrable d'utiliser les objets implicites
${requestScope.name},${sessionScope.name},
${applicationScope.name}, ...
Une fonction EL (voir JSTL)
2015/2016 Jav a Entreprise Edition : JEE 7 79

Langage dexpressions (EL)


Il est possible d'indiquer au conteneur JSP 2.0 de ne pas interprter les EL
d'une page. Il suffit pour cela d'utiliser l'attribut isELIgnored de la
directive page:
<%@ page isELIgnored="true" %>
Il est galement possible de ne pas interprter une EL en particulier en la
protgeant avec un anti-slash:
\${ ceci ne sera pas interprt comme une EL }
Gestion des Exceptions : Les EL grent un certains nombres
d'exceptions afin de ne pas avoir les traiter dans les JSP.
NullPointerException : les diffrentes proprits d'un lment ne sont pas
forcment renseignes et peuvent trs bien tre null.
Exemple : ${ sessionScope['data'].information.date}
Si l'attrib ut data nest pas prsent dans la session, ou si la mthode
getInformation() retourne null... Dans tous les cas, l'expression prendra la
valeur null mais aucune exception ne sera leve.
2015/2016 Jav a Entreprise Edition : JEE 7 80

40
EL : exceptions
ArrayOutOfBoundException:
L'accs un index incorrect d'un lment d'un tableau ou d'une List ne
provoquera pas d'exception mais renverra une valeur null.
ELException:
Certaines exceptions peuvent toujours tre leves, mais elles ne
concernent pas directement les donnes mais l'expression EL.

Exemple : lorsque l'on tente d'accder une proprit sans accesseur


publique, ou que l'on accde une proprit indexe avec un index
qui ne correspond pas un nombre entier

2015/2016 Jav a Entreprise Edition : JEE 7 81

EL : avantages

Une meilleure lisibilit: le code se limite quasiment au nom du


bean et de sa proprit.
Pas de casting, et de ce fait pas d'import (on accde aux
proprits par rflexion).
Gestion des Exceptions : Soit la donne afficher est valide
alors on l'affiche, soit elle n'est pas prsente et on n'affiche
rien... Cela permet de se passer d'effectuer plusieurs
vrifications au sein des JSP avant d'afficher des donnes...

2015/2016 Jav a Entreprise Edition : JEE 7 82

41
EL : rsum
Les EL permettent donc de simplifier le code des pages JSP tout
en amliorant la scurit du code grce la gestion de certaine
exception de base.
La notion d'EL a t introduite afin de faciliter la conception de
pages JSP, en particulier afin de pouvoir accder et utiliser des
donnes sans devoir matriser un langage aussi complexe que
Java...
En effet, la logique de conception des pages JSP se rapproche de la
logique de conception d'une page HTML ou d'un fichier XML.
Ainsi, une formation de base peut permettre un web designer de
concevoir des pages JSP dynamiques en utilisant des beans cres par
un dveloppeur Java...

2015/2016 Jav a Entreprise Edition : JEE 7 83

La bibliothque de marqueurs
standard de JSP (JSTL)
De nombreux frameworks facilitent le dveloppement d'application Java EE.
JSTL propose une librairie standard pour la plupart des fonctionnalits
de base d'une application Java EE.
Le but de la JSTL est de simplifier le travail du web designer ,
responsable de la couche prsentation d'une application web JEE.
La JSTL permet de dvelopper des pages JSP en utilisant des balises
XML, donc avec une syntaxe proche des langages utiliss par les web
designers, et leur permet donc de concevoir des pages dynamiques
complexes sans connaissances du langage Java.
La JSTL se base sur l'utilisation des EL en remplacement des scriptlets
Java.
Il existe diffrentes versions des JSTL(1.0, 1.1, 1.2). La plus rcente se
base sur les JSP 2.0 qui intgre un moteur d'EL.

2015/2016 Jav a Entreprise Edition : JEE 7 84

42
La bibliothque de marqueurs
standard de JSP (JSTL)
JSTL est un ensemble de marqueurs standard permettant dviter le mlange du
code Java et des marqueurs XHTML.
Avec JSTL, on peut manipuler les donnes dynamiques contenues dans une JSP
en utilisant des marqueurs XML au lieu de passer par java.
Les actions possibles vont de laffectation dune valeur un objet la capture des
exceptions en passant par le contrle du flux avec des conditions et des itrateurs
et par laccs aux bases de donnes.
Une bibliothque de marqueurs est une collection de fonctions pouvant tre
utilises dans une page JSP ou JSF.
Ci-dessous, on numre ces fonctions, les URI permettant de rfrencer les
bibliothques et les prfixes associs :
Dom aine URI Prfixe
Noyau http://java.sun.com/jsp/jstl/core c
Traitement XML http://java.sun.com/jsp/jstl/xml x
I18N et formatage http://java.sun.com/jsp/jstl/fmt fmt
Accs BD http://java.sun.com/jsp/jstl/sql sql
2015/2016 Jav a Entreprise Edition : JEE 7 85
Fonctions http://java.sun.com/jsp/jstl/functions fn

La bibliothque de marqueurs
standard de JSP (JSTL)
Avant dutiliser ces actions, la JSP doit importer lURI de la bibliothque et
choisir un prfixe :
soit en utilisant une directive JSP avec le systme de marqueurs JSP.
soit en utilisant une syntaxe XML.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix ="c" %> ou
<jsp:root xmlns:jsp=" http://java.sun.com/JSP/Page "
xmlns:c= "http://java.sun.com/jstl/core" version="1.2" >

Avec cette dclaration, on peut utiliser toutes les actions de la bibliothque


des marqueurs fondamentaux en utilisant le prfixe c :
<c:set var="upperLimit" value="20" /> : ce code initialise la variable
upperLimit avec la valeur 20.

2015/2016 Jav a Entreprise Edition : JEE 7 86

43
JSTL : actions fondamentales

Les actions fondamentales ci-dessous, fournissent des marqueurs pour


manipuler des variables, traiter des erreurs, effectuer des tests et excuter des
boucles et des itrations :
Action Description
<c:out> value une expression et affiche son rsultat
<c:set> Initialise la valeur dun objet
<c:remove> Supprime une variable
<c:catch> Capture une exception java.lang.Throwable lance par lune de ses
actions imbriques
<c:if> Teste si une expression est vraie
<c:choose> Fournit plusieurs alternatives exclusives
<c:w hen> Reprsente une alternative dans une action <c:choose>
<c:otherw ise> Reprsente la dernire alternative dune action <c:choose>

2015/2016 Jav a Entreprise Edition : JEE 7 87

JSTL : actions fondamentales


Action Description
<c:forEach> Rpte son corps pour chaque lment dune collection ou un nombre
fix de fois
<c:forTokens> Itre sur une liste de tokens spars par des virgules
<c:import> Importe une ressource
<c:url> Encode une URL
<c:param> Ajoute des paramtres de requte une URL.
<c:redirect> Redirige vers une URL prcise

Pour illustrer le fonctionnement de certains de ces marqueurs, lexemple suivant


prsente une JSP qui boucle sur les nombres de 3 15 en affichant, pour
chacun deux, sil est pair ou impair.
On peut remarquer que tout le traitement seffectue grce aux marqueurs et que
cette page est conforme XML et comprhensible mme si on connait pas java.

2015/2016 Jav a Entreprise Edition : JEE 7 88

44
JSTL : actions fondamentales
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html> <head> <title>Checking numbers</title> </head>
<body> <h1>Checking numbers</h1>
<hr/>
< c:set var="upperLimit" value="20"/>
<c:forEach var="i" begin="3" end="${upperLimit - 5}">
<c:choose>
<c:when test="${i%2 == 0}"> <c:out value="${i} is even."/><br/> </c:when>
<c:otherwise> <c:out value="${i} is odd."/><br/> </c:otherwise>
</c:choose>
</c:forEach>
</body>
</html>

2015/2016 Jav a Entreprise Edition : JEE 7 89

JSTL : actions fondamentales


lexemple prcdent affiche le rsultat suivant :

2015/2016 Jav a Entreprise Edition : JEE 7 90

45
JSTL : actions de formatage
Les actions de formatages permettent de formater des dates, des nombres,
des valeurs montaires et des pourcentages. Elles reconnaissent aussi
linternationalisation (i18n) : on peut obtenir ou modifier les locales (variable de
langue) et les zones horaires et obtenir lencodage de la page web.
Action Description
<fmt:message> Internationalise une JSP en extrayant un message en fonction de la
langue
<fmt:param> Fournit un paramtre <fmt:message>
<fmt:bundle> Indique le paquetage contenant les messages par langue
<fmt:seLocale> Fixe la langue utiliser
<fmt:requestEncoding> Fixe lencodage des caractres de la requte
<fmt:timeZone> Prcise la zone horaire du format de lheure
<fmt:setTimeZone> Stocke la zone horaire indique dans une zone

2015/2016 Jav a Entreprise Edition : JEE 7 91

JSTL : actions de formatage


Action Description
<fmt:formatNumber> Formate une valeur numrique (nbre, monnaie,%) selon la locale
<fmt:formatDateEach> Formate les dates et les heures selon la langue
<fmt:parseDate> Analyse la reprsentation textuelle des dates et des heures

Lexemple suivant montre comment utiliser ces marqueurs.


La page importe les bibliothques de marqueurs fondamentaux et de formatage.
La variable now initialise avec la date courante, et le marqueur la formate selon
diffrents critres : uniquement lheure, juste la date et les deux ensemble.
On fixe la langue amricaine et formate la valeur montaire en $20.50.
La locale est ensuite modifier pour la Grande-Bretagne afin que cette valeur soit
exprime en livres sterling.

2015/2016 Jav a Entreprise Edition : JEE 7 92

46
JSTL : actions de formatage
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html> <head> <title>Formatting data</title> </head>
<body> <h1>Formatting data</h1>
<hr/> Dates<br/> <c:set var="now" value="<%=new java.util.Date()%>"/>
<fm t:formatDate type="time" value="${now}"/><br/>
<fmt:formatDate type="date" value="${now}"/><br/>
<fmt:formatDate type="both" dateStyle="short" timeStyle="short"
value="${now}"/><br/>
<fmt:formatDate type="both" dateStyle="long" timeStyle="long"
value="${now}"/><br/>
Currency<br/> <fmt:setLocale value="en_us"/>
<fmt:formatNumber value="20.50" type="currency"/><br/>
<fmt:setLocale value="en_gb"/>
<fmt:formatNumber value="20.50" type="currency"/><br/>
</body> </html>

2015/2016 Jav a Entreprise Edition : JEE 7 93

JSTL : actions de formatage


Lexemple prcdent produit le rsultat suivant :

2015/2016 Jav a Entreprise Edition : JEE 7 94

47
JSTL : actions SQL
Les actions SQL de la JSTL permettent deffectuer des requtes sur une base
de donnes (insertions, modifications et suppressions), daccder aux rsultats
de ces requtes et mme de mettre en place un contexte transactionnel.
Normalement pour laccs une base de donnes se fait avec les entits JPA
et les EJB mais, pour des applications spcifiques, on a besoin daccder une
base partir dune page web. Les marqueurs de la bibliothque SQL sont :
Action Description
<sql:query> Interroge une base de donnes
<sql:update> Excute une instruction SQL INSERT, UPDATE ou DELETE.
<sql:transaction> tablit un contexte transactionnel pour les marqueurs <sql:query>
et <sql:update>
<sql:setDataSource> Indique la source de donnes
<sql:param> Fixe les valeurs des marqueurs demplacements (?) dune
instruction SQL
<sql:dataParam> Fixe les valeurs des marqueurs demplacements (?) dune
2015/2016 Javpour
instruction SQL a Entreprise Edition
les valeurs de: JEE
type7 java.util.Date. 95

JSTL : actions SQL


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html> <head> <title>Lists all the books</title> </head>
<body> <h1>Lists all the books</h1>
<hr/> <sql:setDataSource dataSource="jdbc/__default"/>
<sql:query var="books"> select * from book </sql:query>
<table border="1">
<tr> <th>ISBN</th> <th>Title</th> <th>Price</th> <th>Description</th>
<th>Number of pages</th> <th>Illustrations</th> </tr>
<c:forEach var="row" items="${books.rows}">
<tr> <td><c:out value="${row.isbn}"/></td> <td><c:out value="${row.title}"/></td>
<td><c:out value="${row.price}"/></td> <td><c:out value="${row.description}"/></td>
<td><c:out value="${row.nbOfPage}"/></td>
<td><c:out value="${row.illustrations}"/></td>
</tr>
</c:forEach>
</table> </body> </html>

2015/2016 Jav a Entreprise Edition : JEE 7 96

48
JSTL : actions SQL
Cette JSP importe une bibliothque sql et indique une source de donnes ici
jdbc/__default fournie avec GlassFish.
Le rsultat de la requte select est stock dans la variable books et toutes les
lignes obtenues se trouvent dans la collection books.rows, que lon parcourt
avec le marqueur <c:forEach>.
Le rsultat daffichage de lexemple prcdent est comme suit :

2015/2016 Jav a Entreprise Edition : JEE 7 97

JSTL : actions XML


La bibliothque de marqueurs XML ressemble la bibliothque de marqueurs
fondamentaux.
Elle permet deffectuer une analyse XML, ditrer sur les lments des
collections, deffectuer des oprations reposant sur les expressions Xpath et de
raliser des transformations laide de documents XSL.
Action Description
<x:parse> Analyse un document XML
<x:out> value une expression XPATH et produit son rsultat
<x:set> value une expression XPATH et stocke son rsultat dans une variable
<x:if> value lexpression XPATH si lexpression est vraie
<x:choose> Fournit plusieurs alternatives exclusives
<x:w hen> Reprsente une alternative dans une action <x:choose>
<x:otherw ise> Reprsente la dernire alternative dune action <x:choose>

2015/2016 Jav a Entreprise Edition : JEE 7 98

49
JSTL : actions XML
Action Description
<x:forEach> value une expression XPATH et rpte son contenu sur le rsultat
<x:transform> Applique une feuille de style XSLT un document XML
<x:param> Ajoute les paramtres de la transformation <x:transform>

Nous avons besoin dun document XML pour effectuer les transformations
ralises par ces marqueurs.
Soit un fichier b ooks.xml qui contient une liste de livres.
Soit un fichier JSP qui analyse et affiche tous les livres de b ooks.xml
Cette JSP importe la bibliothque des marqueurs XML et charge le fichier
b ooks.xml dans une variable b ookUrl qui contient le texte brut, qui doit tre
analys par <x:parse>-le DOM rsultat sera stock dans la variable doc.
Lorsque le document est analys, on peut le parcourir et afficher les valeurs en
utilisant des expressions XPATH avec <x:out>

2015/2016 Jav a Entreprise Edition : JEE 7 99

JSTL : actions XML


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<html> <head> <title>Lists all the books</title> </head>
<body> <h1>Lists all the books</h1>
<hr/> <table border="1">
<tr> <th>ISBN</th> <th>Title</th> <th>Price</th> <th>Description</th>
<th>Number of pages</th> <th>Illustrations</th> </tr>
<c:im port url="books.xml" var=bookUrl"/>
<x:parse xm l="${bookUrl}" var="doc"/>
<x:forEach var="b" select="$doc/books/book">
<tr> <td><x:out select="$b/@isbn"/></td> <td><x:out select="$b/title"/></td>
<td><x:out select="$b/@price"/></td> <td><x:out select="$b/description"/></td>
<td><x:out select="$b/@nbOfPage"/></td> <td><x:out select="$b/@illustrations"/></td>
</tr>
</x:forEach>
</table>
</body> </html>

2015/2016 Jav a Entreprise Edition : JEE 7 100

50
JSTL : actions XML
<?xml version='1.0' encoding='UTF-8'?>
<books> <book isbn='1234-234' price='12' nbOfPage='241' illustrations='true'>
<title>H2G2</title> <description>Scifi IT book</description> </book>
<book isbn='564-694' price='18.5' nbOfPage='317' illustrations='true'>
<title>Robots</title> <description>Best seller</description> </book>
<book isbn='256-6-56' price='23.25' nbOfPage='529' illustrations='false'>
<title>Dune</title> <description>The trilogy</description> </book>
</books>

2015/2016 Jav a Entreprise Edition : JEE 7 101

JSTL : Fonctions
Les fonctions ne sont pas des marqueurs et sont quand mme dfinies dans la
spcification JSTL.
Elles peuvent tre utilises avec EL et sont principalement employes pour
traiter les chaines de caractres : ${fn:contains("H2G2", "H2")}
Ce code teste si une chaine contient une sous-chaine particulire : ici lappel
renverra true car H2G2 contient H2.
${fn:length("H2G2")} : lappel renvoie la longueur dune chaine (ici 4)
Une JSP peut afficher les rsultats des fonctions (avec <c:out>), ou les utiliser
dans un test ou une boucle.
Action Description
<fn:contains> Teste si une chaine contient la sous chaine indique
<fn:containsIgnoreCase> Idem, sans tenir compte de la casse
<fn:endsWith> Test si une chane se termine par le suffixe indiqu
<fn:escapeXml> Protge les caractres pouvant tre interprts comme du XML
2015/2016 Jav a Entreprise Edition : JEE 7 102

51
JSTL : Fonctions
Action Description
<fn:indexOf> Renvoie lindice de la premire occurrence dune sous-chane
dans une chane
<fn:join> Joint tous les lments dun tableau pour former une chane
<fn:length> Renvoie le nombre dlments dune collection ou taille de string
<fn:replace> Renvoie une chane o toutes les occurrences de la sous-chane
indique ont t remplaces par une autre chane
<fn:split> Dcoupe une chane pour obtenir un tableau de sous-chanes
<fn:startsWith> Teste si une chane commence par le prfixe indiqu
<fn:substring> Renvoie une sous chane
<fn:substringAfter> Renvoie la sous chane situe aprs la sous chane indique
<fn:substringBefore> Renvoie la sous chane situe avant la sous chane indique

<fn:toLow erCase> Convertit une chane en minuscules


<fn:toUpperCase> Convertit une chane en majuscules
<fn:trim> Supprime les espaces aux deux extrmits dune chane

2015/2016 Jav a Entreprise Edition : JEE 7 103

JSTL : Fonctions
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<html> <head> <title>Use JSTL Functions</title> </head>
<body> <h1>Use JSTL Functions</h1>
<hr/> Should be true : ${ fn:contains("H2G2", "H2") }<br/>
Should be false : ${ fn:contains("H2G2", "h2") }<br/>
Should be true : ${ fn:containsIgnoreCase("H2G2", "h2") }<br/>
Should be false : ${ fn:endsWith("H2G2", "H2") }<br/>
Should be true : ${ fn:endsWith("H2G2", "G2") }<br/>
Should be 2 : ${fn:indexOf("H2G2", "G2")}<br/>
Should be 4 : ${fn:length("H2G2")}<br/>
<c:if test="${fn:length('H2G2') == 4}"> It is four caracters long </c:if>
</body>
</html>

2015/2016 Jav a Entreprise Edition : JEE 7 104

52
JSTL : Fonctions
Lexemple prcdent affiche le rsultat suivant :

2015/2016 Jav a Entreprise Edition : JEE 7 105

Facelets
Lorsque JSF a t cre, le but consistait rutiliser JSP, qui faisait dj partie
de java EE, comme langage de dclaration de page (PDL).
JSP utilisait EL et JSTL et lide consistait donc rutiliser toutes ces
technologies avec JSF.
JSP est un langage de page et JSF, une couche de composants situe au-
dessus. Mais, les cycles de vie de JSP et de JSF ne saccordent pas.
Pour produire une rponse, les marqueurs de JSP sont traits de haut en bas,
dans lordre o ils apparaissent; alors que le cycle de vie de JSF est diffrent
et la production de larborescence des composants et leur traitement ont lieu
dans des phases diffrentes.
Do lintroduction des facelets pour correspondre au cycle de vie des JSF.
Les facelets sont donc une alternative open-source JSP qui ne fait pas partie
de java EE.
Les facelets utilisent des pages (XHTML) dune application JSF.

2015/2016 Jav a Entreprise Edition : JEE 7 106

53
Facelets
Les facelets ont t conu en tenant compte de JSF, elles fournissent un
modle de programmation plus simple que celui de JSF.

Les facelets disposent dune bibliothque de marqueurs permettant dcrire


linterface utilisateur et reconnat en partie les marqueurs JSTL.

La caractristique essentielle de facelets est son mcanisme de template de


pages, qui est bien plus souple que celui de JSP. Il permet galement de crer
des composants personnaliss utilisables dans le modle arborescent de JSF.

La bibliothque des marqueurs Facelets est dfinie par lURI


http://java.sun.com/jsf/facelets et utilise gnralement le prfixe ui.
http://xmlns.jcp.org/jsf/facelets pour JEE 7

2015/2016 Jav a Entreprise Edition : JEE 7 107

Facelets : les marqueurs


Marqueur Description
<ui:composition> Dfinit une composition qui utilise ventuellement un template.
Plusieurs compositions peuvent utiliser le mme template.
<ui:component> Cre un composant
<ui:debug> Capture les informations de dbogage
<ui:define> Dfinit le contenu insr dans une page par un template
<ui:decorate> Dcore une partie du contenu dune page
<ui:fragment> Ajoute un fragment de page
<ui:include> Encapsule et rutilise un contenu dans plusieurs pages XHTML,
comme le marqueur <jsp:include> de JSP
<ui:insert> Insre un contenu dans un template
<ui:param> Passe des paramtres un fichier inclus par <ui:include> ou un
template
<ui:repeat> Alternative <c:forEach>
<ui:remove> Supprime le contenu dune page

2015/2016 Jav a Entreprise Edition : JEE 7 108

54
JavaServer faces : cycle de vie
Pour crire une page JSF, on doit utiliser un langage de dclaration de
page(PDL) : jusqu JSF 1.2, le PDL prfr tait JSP mais son cycle de vie
de pages et celui de JSF sont diffrents. Cest pourquoi, on conseille facelets
(page en XHTML) comme PDL avec JSF 2.0 et JSF 2.2.

Le cycle de vie des JSP est simple. Un source JSP est compil en servlet,
laquelle le conteneur web passera les requtes HTTP quil reoit. La servlet
traite la requte puis renvoie la rponse au client.

Une page JSF est une arborescence de composants avec un cycle de vie
spcifique qui permet de savoir le moment de validation des composants.

Les donnes saisies par lutilisateur passent par une tape de validation
avant que le modle soit mis jour et que le code mtier soit appel.

JSF se charge alors de vrifier que chaque composant graphique est


correctement rendu par le navigateur.
2015/2016 Jav a Entreprise Edition : JEE 7 109

JavaServer faces : cycle de vie

2015/2016 Jav a Entreprise Edition : JEE 7 110

55
JavaServer faces : cycle de vie
Le cycle de vie de JSF se divise en 6 tapes (en gris dans le schma) :
1. Restauration de la vue. JSF trouve la vue cible et lui applique les entres de
lutilisateur. Sil sagit de la premire visite, JSF cre la vue comme un
composant UIViewRoot (racine de larborescence de composants, qui constitue
une page particulire). Pour les requtes suivantes, JSF rcupre lUIViewRoot
prcdemment sauvegard pour traiter la requte HTTP courante.
2. Application des valeurs de la requte. Les valeurs fournies avec la requte
(champs de saisie dun formulaire, valeurs cookies ou partir des en-ttes
HTTP) sont appliques aux diffrents composants de la page. Seuls les
composants UI modifient leur tat, non les objets mtiers qui forment le modle.
3. Validations. Lorsque tous les composants UI ont reu leurs valeurs, JSF traverse
larborescence de composants et demande chacun deux de sassurer que la
valeur qui leur a t soumise est correcte. Si la conversion et la validation
russissent pour tous les composants, le cycle de vie passe la phase suivante.
Sinon il passe la phase de rendu de la rponse avec les messages derreur de
validation et de conversion appropris
2015/2016 Jav a Entreprise Edition : JEE 7 111

JavaServer faces : cycle de vie


4. Modification des valeurs du modle. Lorsque toutes les valeurs des
composants ont t affectes et valides, les backing beans qui leur sont
associs peuvent tre jour.
5. Appel de lapplication. On peut maintenant excuter la logique mtier. Les
actions qui ont t dclenches seront excutes sur le backing bean. La
navigation entre en jeu car cest la valeur quelle renvoie qui dterminera la
rponse.
6. Rendu de la rponse. Le but principal de cette phase consiste renvoyer la
rponse lutilisateur. Son but secondaire est de sauvegarder ltat de la vue
pour pouvoir la restaurer dans la phase de restauration si lutilisateur
redemande la vue.
Le thread dexcution dun cycle requte/rponse peut passer ou non par
chacune de ces tapes en fonction de la requte et de son traitement. Les
tapes 2, 3, 4 et 5 peuvent produire des messages derreur. Avec ou sans
erreur la phase de rendu de la rponse (tape 6) renvoie toujours le rsultat
lutilisateur
2015/2016 Jav a Entreprise Edition : JEE 7 112

56
JSF : bibliothques de marqueurs
Une page en facelets sous JSF 2.0 peut utiliser les bibliothques de
marqueurs suivantes :
URI Prfixe description
http://xmlns.jcp.org/jsf/html h Contient les composants et leurs rendus
HTML (h:inputText, )
http://xmlns.jcp.org/jsf/core f Contient les actions personnalises
indpendant dun rendu particulier
http://xmlns.jcp.org/jsf/facelets ui Marqueurs pour le support des templates
http://xmlns.jcp.org/jsf/composite composite Sert dclarer et dfinir des
composants composites
http://xmlns.jcp.org/jsp/jstl/core c Les pages facelets utilisent certains
marqueurs fondamentaux
http://xmlns.jcp.org/jsp/jstl/functions fn Les pages facelets utilisent les fonctions

2015/2016 Jav a Entreprise Edition : JEE 7 113

JSF : composants HTML


Une interface utilisateur pour une page web donne est cre en
assemblant des composants qui fournissent les fonctionnalits
spcifiques afin dinteragir avec lutilisateur (labels, cases
cocher,..).

JSF met la disposition un certain nombre de classes composants


couvrant la plupart des besoins classiques.

Une page est une arborescence de classes hritant de


javax.faces.component.UIComponent et ayant des proprits, des
mthodes et des vnements. La racine de larbre est une instance
de UIViewRoot et tous les autres composants respectent une
relation dhritage.

2015/2016 Jav a Entreprise Edition : JEE 7 114

57
JSF : les composants commandes
Les commandes sont les contrles sur lesquels lutilisateur peut cliquer
pour dclencher une action.

Ces composants sont gnralement reprsents sous forme de bouton ou


de liens hypertextes, indiqus par les marqueurs :

<h:commandButton> : reprsente un lment HTML pour un bouton de


type sub mit ou reset.

<h:commandLink> : reprsente un lment HTML pour un lien agissant


comme un bouton submit. Ce composant doit tre plac dans un
formulaire.

CommandButton est par dfaut de type sub mit. Pour associer une image,
on utilise lattribut image au lieu de lattribut value.

2015/2016 Jav a Entreprise Edition : JEE 7 115

JSF : les composants commandes


Exemple :
<h:commandButton value="A submit button" />
<h:commandButton type="reset" value="A reset
button" />
<h:commandButton im age="/ressources/imag.gif"
title="A button w ith an image" />
<h:commandLink> A hyperlink </h:commandLink>

Les boutons et les liens ont tous deux un attribut


action permettant dappeler une mthode dun
backing bean. Voici comment invoquer la mthodes
doNew() du backing bean bookController :

<h:commandLink action=" #{bookController.doNew }">


Create a new book
</h:commandLink>
2015/2016 Jav a Entreprise Edition : JEE 7 116

58
JSF : les composants dentres
Les entres sont des composants qui affichent leur valeur courante et
permettent lutilisateur de saisir diffrentes informations textuelles.
Il peut sagir de champs de saisie, de zones de texte ou de
composants pour entrer un mot de passe ou des donnes caches.
Marqueur Description
<h:inputHidden> Reprsente un lment dentre HTML de type cach (non affich)
<h:inputSecret> Reprsente un lment dentre HTML de type mot de passe. Pour
des raisons de scurit, tout ce qui a t saisi ne sera pas affich,
sauf si la proprit redisplay vaut true.
<h:inputText> Reprsente un lment dentre HTML de type texte.
<h:inputTextarea> Reprsente une zone de texte HTML.
<h:inputFile> Permet de parcourir un rpertoire et tlcharger un fichier

2015/2016 Jav a Entreprise Edition : JEE 7 117

JSF : les composants dentres


De nombreuses pages web contiennent des formulaires pour que lutilisateur
puisse saisir des donnes ou se connecter en fournissant un mot de passe.
Les composants dentres utilisent plusieurs attributs permettant de modifier
leur longueur, leur contenu ou leur aspect :

<h:inputHidden value="Hidden data" />


<h:inputSecret m axlength="8" />
<h:inputText value="An input text" />
<h:inputText size="40" value="A longer input text" />
<h:inputTextarea row s="4" cols="20" value="A text area " />

Tous les composants ont un attribut value pour fixer leur valeur par dfaut.
maxlength permet de sassurer que le texte saisi ne dpasse pas une
longueur donne et lattribut size modifie la taille par dfaut du composant.

2015/2016 Jav a Entreprise Edition : JEE 7 118

59
JSF : les composants dentres
Le code de la page prcdente produit le rsultat suivant:

2015/2016 Jav a Entreprise Edition : JEE 7 119

JSF : les composants de sortie


Les composants de sortie affichent une valeur qui peut ventuellement avoir t
obtenue partir dun backing bean, une expression valeur ou un texte littral.
Lutilisateur ne peut pas modifier ce contenu car il nest quen lecture seule.
Marqueur Description
<h:outputLabel> Produit un lment <label> de HTML
<h:outputLink> Produit un lment <a>
<h:outputText> Produit un texte littral
<h:outputFormat> Produit un texte paramtr
La plupart des pages web affichent du texte. On peut utiliser les lments HTML
classiques ou bien les marqueurs de sortie JSF avec EL pour afficher le contenu
dune variable lie un backing bean.
Remarque : les marqueurs <h:commandLink> et <h:outputLink> sont diffrents
car le dernier affiche le lien sans invoquer de mthode lorsquon clique dessus- il
cre simplement un lien externe ou une ancre.
2015/2016 Jav a Entreprise Edition : JEE 7 120

60
JSF : les composants de sortie
Exemple :

<h:outputLabel value=" #{bookController.book.title}" />


<h:outputText value =" A text" />
<h:outputLink value =" http://www.fsr.ac.ma/" > A link </h:outputLink>
<h:outputFormat value="Welcome {0}. You have bought {1} items">
<f:param value="#{user.firstName}" />
<f:param value="#{user.itemsBought}" />
</h:outputFormat>
Le rsultat est le code HTML suivant :
<label> the title of the book</label>
A text
<a href=" http://www.fsr.ac.ma/" > A link </a>
Welcome Ahmed. You have bought 5 items
2015/2016 Jav a Entreprise Edition : JEE 7 121

JSF : les composants de slection


Les composants de slection permettent de choisir une ou plusieurs valeurs dune liste.
Graphiquement, ils sont reprsents par des cases cocher, des boutons radio, des
listes ou des combo box.
Marqueur Description
<h:selectBooleanCheckbox> Produit une case cocher reprsentant une valeur boolenne
unique. Cette case est initialise selon la valeur de checked
<h:selectManyCheckbox> Produit une liste de cases cocher
<h:selectManyListbox> Produit un composant choix multiples, dans lequel on peut
choisir une ou plusieurs options
<h:selectManyMenu> Produit un lment <select> HTML
<h:selectOneListbox> Produit un composant choix unique, dans lequel on ne peut
choisir quune seule option
<h:selectOneMenu> Produit un composant choix unique, dans lequel on ne peut
choisir quune seule option. Naffiche quune option la fois
<h:selectOneRadio> Produit une liste de boutons radio
2015/2016 Jav a Entreprise Edition : JEE 7 122

61
JSF : les composants de slection
Les marqueurs du tableau prcdent ont une reprsentation graphique mais ont
besoin dimbriquer dautres marqueurs (<f:selectItem> ou <f:selectItems>) pour
contenir les options disponibles.
Pour reprsenter une combo box contenant une liste de genres littraires, il faut
imbriquer un ensemble de marqueurs <f:selectItem> dans <h:selectOneMenu> :
<h:seleteOneMenu>
<f:selectItem itemLabel =" History" />
<f:selectItem itemLabel =" Biography" />
<f:selectItem itemLabel =" Literature" />
<f:selectItem itemLabel =" Comics" />
<f:selectItem itemLabel =" Child" />
<f:selectItem itemLabel =" Scifi" />
</h:seleteOneMenu>.
Comme tous les autres composants, on peut directement lier la valeur dun
backing bean (List, Set, etc.) lune de ces listes .
2015/2016 Jav a Entreprise Edition : JEE 7 123

JSF : les composants de slection


Cette figure montre toutes les reprsentations possibles des marqueurs de slection:

2015/2016 Jav a Entreprise Edition : JEE 7 124

62
JSF : les composants graphiques
Il existe un seul composant pour afficher les images :
<h:graphicImage>.
Ce marqueur utilise un lment HTML <img> pour
afficher une image que les utilisateurs ne peuvent pas
manipuler.
Les attributs de ce composant, permettent de modifier
la taille de limage, de lutiliser comme image cliquable,
etc.
Une image peut tre lie une proprit dun backing
bean et provenir dun fichier sur le systme ou dune
base de donnes.
Exemple : afficher une image en modifiant sa taille
<h:graphicImage value= " book.gif " height=" 200"
w idth=" 320" />

2015/2016 Jav a Entreprise Edition : JEE 7 125

JSF : les composants grilles et


tableaux
Les donnes doivent, trs souvent, tre affiches sous forme dun tableau.
JSF fournit le marqueur <h:dataTable> pour parcourir une liste dlments et
produire un tableau (listBooks.xhtml prcdent).
Les tableaux permettent galement de crer une interface utilisateur en grille.
Dans ce cas, on peut utiliser les marqueurs <h:panelGrid> et
<h:panelGroup> pour disposer les composants.
la diffrence de <h:dataTable>, le marqueur <h:panelGrid> nutilise pas de
modle pour produire les lignes de donnes. Cest un conteneur pour produire
les autres composants JSF dans une grille de lignes et de colonnes.
Si on prcise le nombre de colonnes : <h:panelGrid> dtermine le nombre de
lignes ncessaires.
Pour combiner plusieurs composants dans la mme colonne, on utilise
<h:panelGroup> qui produira ses fils comme un seul composant. On peut
galement dfinir un entte et un pied laide du marqueur <f:facet>

2015/2016 Jav a Entreprise Edition : JEE 7 126

63
JSF : les composants grilles et
tableaux
<h:dataTable value="#{htmlComponentController.bookList}" var="bk" border="1">
<h:column> <h:outputText value="#{bk.isbn}"/> </h:column>
<h:column> <h:outputText value="#{bk.title}"/> </h:column>
<h:column> <h:outputText value="#{bk.price}"/> </h:column>
<h:column> <h:outputText value="#{bk.description}"/> </h:column>
<h:column> <h:outputText value="#{bk.nbOfPage}"/> </h:column>
<h:column> <h:outputText value="#{bk.illustrations}"/> </h:column>
</h:dataTable>
<br/> <h:panelGrid columns="3" border="1" style=".sample">
<h:outputLabel value="One"/> <h:outputLabel value="Two"/> <h:outputLabel value="Three"/>
<h:outputLabel value="Four"/> <h:outputLabel value="Five"/> <h:outputLabel value="Six"/>
</h:panelGrid>
<br/> <h:panelGrid columns="3" border="1" style=".sample">
<f:facet name="header"> <h:outputText value="Header"/> </f:facet>
<h:outputLabel value="One"/> <h:outputLabel value="Two"/> <h:outputLabel value="Three"/>
<h:outputLabel value="Four"/> <h:outputLabel value="Five"/> <h:outputLabel value="Six"/>
<f:facet name="footer"> <h:outputText value="Footer"/> </f:facet>
</h:panelGrid>

2015/2016 Jav a Entreprise Edition : JEE 7 127

JSF : composants grilles et tableaux


Marqueur Description Rsultat du code de la page prcdente

<h:dataTable> Reprsente un ensemble de


donnes qui seront affiches dans
un lment <table> de HTML

<h:column> Produit une colonne de donnes


dans un composant
<h:dataTable>
<h:panelGrid> Produit un lment <table> HTML

<h:panelGroup> Conteneur de composants


pouvant simbriquer dans un
<h:panelGrid>

2015/2016 Jav a Entreprise Edition : JEE 7 128

64
JSF : messages derreur
Les applications peuvent lancer des exceptions en rponse des donnes mal
formates ou toute autre raison. Dans ce cas, il ne faut afficher dans linterface
utilisateur que ce qui est ncessaire pour corriger le problme.
Le mcanisme de gestion de messages derreur passe par lutilisation des
marqueurs <h:message> et <h:messages>.
<h:message> est li un composant prcis alors que <h:messages> permet de
dfinir un message global pour tous les composants de la page.
Les messages sont de diffrents type (INFO, WARN, ERROR et FATAL) :
chaque type sera affich dans un style diffrent.

<h:messages style="color:red"/>
<h:form> Enter a title: <h:inputText value="#{bookController.title}" required="true"/>
<h:commandButton action="#{bookController.doNew }" value="Save"/> </h:form>

2015/2016 Jav a Entreprise Edition : JEE 7 129

JSF : les autres composants


Il y a des marqueurs JSF nayant pas de reprsentation graphique mais
possdent un quivalent HTML :

Marqueur Description

<h:body> Produit un lment <body> HTML


<h:head> Produit un lment <head> HTML
<h:form> Produit un lment <form> HTML
<h:outputScript> Produit un lment <script> HTML
<h:outputStylesheet> Produit un lment <link> HTML

Les marqueurs de JSF ont des attributs supplmentaires qui facilitent le


dveloppement. En effet, on peut utiliser JavaScript laide du marqueur
HTML : <script type=" text/JavaScript">, mais le marqueur <h:outputscript> de
JSF permet dutiliser la nouvelle gestion des ressources.

2015/2016 Jav a Entreprise Edition : JEE 7 130

65
JSF : les templates
Une application web typique contient plusieurs pages partageant toutes le
mme aspect, un entte, un pied de page, un menu, etc.
Les facelets permettent de dfinir une disposition de page dans un fichier
template qui pourra tre utilis par toutes les pages : ce fichier dfinit les zones
(ayant le marqueur <ui:insert>) dont le contenu sera remplac grce aux
marqueurs <ui:component>, <ui:composition>, <ui:fragment> ou <ui:decorate>
des pages clientes.
Marqueur Description
<ui:composition> Dfinit une composition utilisant ventuellement un template. Le
mme template peut tre utilis par plusieurs compositions.
<ui:define> Dfinit un contenu qui sera insr dans llment <ui:insert>
correspondant du template.
<ui:decorate> Permet de dcorer le contenu dune page.
<ui:fragment> Ajoute un fragment une page.
<ui:insert> Dfinit un point dinsertion dans un template dans lequel on pourra
2015/2016 ensuite insrerJav
unacontenu
Entrepriseplac dans
Edition un7 marqueur <ui:define>
: JEE 131

JSF : les templates


Exemple : rutilisons la page qui affichait un formulaire pour crer un livre.
Nous pourrions considrer que le titre est len-tte de la page et que le texte
"Java EE 7" est le pied de page. Le contenu du template layout.xhtml
ressemblerait au code suivant :
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xml:lang="en" lang="en">
<head> <title> <ui:insert name="title">Default title</ui:insert> </title>
</head>
<body> <h1> <ui:insert name="title">Default title</ui:insert> </h1>
<hr/> <ui:insert name="content">Default content</ui:insert>
<hr/> <i>Java EE 7</i>
</body> </html>
2015/2016 Jav a Entreprise Edition : JEE 7 132

66
JSF : les templates
Le template doit dabord dfinir la bibliothque de marqueurs ncessaire :
(xmlns:ui="http://xmlns.jcp.org/jsf/facelets").
Le template utilise un marqueur <ui:insert> pour insrer un attribut title dans
les marqueurs HTML <title> et <h1>. Le corps sera insr dans lattribut
content.
Pour utiliser ce template, la page newBook.xhtml prsente dans le slide
suivant doit le dclarer (<ui:composition template=" layout.xhtml">).
Ensuite le principe consiste lier les attributs dfinis par les marqueurs
<ui:define> de la page ceux des marqueurs <ui:insert> du template.
Dans lexemple, le titre de la page " Create a new book", est stock dans la
variable title (avec <ui:define name ="title">) et sera li au marqueur
correspondant dans le template (<ui:insert name="title">).
Il en va de mme pour le reste de la page, qui est insr dans la variable
content (<ui:define name="content">).

2015/2016 Jav a Entreprise Edition : JEE 7 133

JSF : les templates


<html xmlns="http://www.w3.org/1999/xhtml"
xm lns:ui="http://xmlns.jcp.org/jsf/facelets"
xml:lang="en" lang="en">
<ui:com position template="layout.xhtml">
<ui:define name="title">Create a new book</ui:define>
<ui:define name="content">
<table border="0">
<tr> <td>ISBN :</td> <td><input type="text"/></td> </tr>
<tr> <td>Title :</td> <td><input type="text"/></td> </tr>
<tr> <td>Price :</td> <td><input type="text"/></td> </tr>
<tr> <td>Description :</td> <td><textarea name="textarea" cols="20"
row s="5"></textarea></td> </tr>
<tr> <td>Number of pages :</td> <td><input type="text"/></td> </tr>
<tr> <td>Illustrations :</td> <td><input type="checkbox"/></td> </tr>
</table>
<input name="" type="submit" value="Create"/>
</ui:define>
</ui:com position>
</html>
2015/2016 Jav a Entreprise Edition : JEE 7 134

67
JSF : les templates
Lappel de la page layout.xhtml
affiche :

Lappel de la page newBook.xhtml


affiche :

2015/2016 Jav a Entreprise Edition : JEE 7 135

JSF : gestion des ressources


La plupart des composants ont besoin de ressources externes pour safficher
correctement : <h:graphiqueImage> a besoin dune image,
<h:commandButton> peut afficher une image pour reprsenter le bouton,
<h:outputScript> rfrence un fichier JavaScript et les composants peuvent
galement appliquer des styles CSS.
Avec JSF, une ressource est un lment statique qui peut tre transmis aux
lments afin dtre affich (images) ou trait (javascript, CSS) par le
navigateur.
Les versions prcdentes de JSF ne fournissaient pas de mcanisme particulier
pour servir les ressources : lorsque lon voulait en fournir une, il fallait la placer
dans le rpertoire WEB-INF pour que le navigateur du client puisse y accder.
Pour la modifier, il fallait remplacer le fichier et, pour grer les ressources
localises (une image avec un texte anglais et une autre avec un texte en
francais), il fallait utiliser des rpertoires diffrents.

2015/2016 Jav a Entreprise Edition : JEE 7 136

68
JSF : gestion des ressources
JSF 2.0 permet dassembler directement des ressources dans un fichier jar
spar, avec un numro de version et une locale, et de le placer la racine
de lapplication web, sous le rpertoire suivant:
resources/<identifiant_ressource> ou
Ou META-INF/resources/<identifiant_ressource>
<identifiant_ressource> est form de plusieurs sous-rpertoires indiques
sous la forme :
[locale/][nomBib/][versionBib/]nomressource[/versionRessource]
Tous les lments entre crochets sont facultatifs. La locale est le code du
langage, suivi ventuellement dun code de pays (en, en_US, pt, pt_BR).
On peut ajouter un numro de version la bibliothque ou la ressource
elle-mme.
Exemples : book.gif

en/book.gif

2015/2016 Jav a Entreprise Edition : JEE 7 137

JSF : gestion des ressources


en_US/book.gif
en/myLibrary/book.gif
myLibrary/book.gif
myLibrary/1_0/book.gif
mylibrary/1_0/book.gif/2_3.gif
On peut ensuite utiliser une ressource, une image par exemple, directement
dans un composant <h:graphicImage> ou en prcisant le nom de la bibliothque
(library="myLibrary").
La ressource correspondant la locale du client sera automatiquement choisie.
<h:graphicImage value="book.gif" />
<h:graphicImage value="book.gif" library="myLibrary" />
<h:graphicImage value="#{resource[book.gif]}" />
<h:graphicImage value="#{resource[ myLibrary:book.gif ]}" />

2015/2016 Jav a Entreprise Edition : JEE 7 138

69
JSF : les composants composites
Tous les composants hritaient, directement ou indirectement, de la classe
javax.faces.componentUIComponent.

Avant JSF 2.0, pour crer un composant :


Il fallait tendre la classe component la plus proche (UICommand,
UIGraphic, UIOutput,..),
La dclarer dans le fichier faces-config.xml ,
Fournir un descripteur de marqueur et une reprsentation.
Les facelets ont montr quil possible de crer plus simplement des composants
puissants.

Le but des composants composites est de permettre aux dveloppeurs de crer


de vrais composants graphiques rutilisables sans avoir besoin dcrire du java
ou mettre en place une configuration XML.

2015/2016 Jav a Entreprise Edition : JEE 7 139

JSF : les composants composites


Cette nouvelle approche consiste crer une page XHTML contenant les
composants, puis de lutiliser comme composant dans dautres pages.

Cette page XHTML est alors vue comme un vritable composant supportant
des validateurs, des convertisseurs et des couteurs.
Les composants composites peuvent contenir nimporte quel marqueur valide
et utiliser les templates.
Ils sont traits comme des ressources et doivent donc se trouver dans les
nouveaux rpertoires standard des ressources.
Marqueur Description
<composite:interface> Dclare le contrat dun composant
<composite:implementation> Dfinit limplmentation dun composant
<composite:attribute> Dclare un attribut pouvant tre fourni une instance du
composant. <composite:interface> peut en contenir
plusieurs
2015/2016 Jav a Entreprise Edition : JEE 7 140

70
JSF : les composants composites
Marqueur Description
<composite:facet> Dclare que ce composant supporte une facet
<composite:insertFacet> Utilis dans un marqueur <composite:implementation>. La
facet insre sera reprsente dans le composant.
<composite:insertChildren> Utilis dans marqueur <composite:implementation>. Tous les
composants fils ou les templates seront insrs dans la
reprsentation de ce composant
<composite:valueHolder> Le composant dont le contrat est dclar par le marqueur
<composite:interface> dans lequel est imbriqu cet lment
devra exposer une implmentation de valueHolder
<composite:editablevalueHo Le composant dont le contrat est dclar par le marqueur
lder> <composite:interface> dans lequel est imbriqu cet lment
devra exposer une implmentation deditableValueHolder
<composite:actionSource> Le composant dont le contrat est dclar par le marqueur
<composite:interface> dans lequel est imbriqu cet lment
devra exposer une implmentation de linterface actionSource
2015/2016 Jav a Entreprise Edition : JEE 7 141

JSF : les composants composites


Exemple : on montre la facilit avec laquelle on peut crer un composant
graphique et lutiliser dans dautres pages.
Lapplication CD-BookStore vendait deux sortes darticles : des livres et des
CD.
Pour que lapplication web puisse crer de nouveaux livres et de nouveaux
CD, on a besoin de deux formulaires diffrents, mais les attributs dItem
pourraient tre dans une page distincte qui agirait comme un composant part
entire (voir slide suivant).
On va crer donc un composant composite contenant deux champs de saisie
(pour le titre et le prix) et une zone de texte (pour la description).
Un composant avec JSF 2.0 est proche de celui de Java :
dabord une interface, <composite:interface> qui sert de point dentre pour
le composant, elle dcrit les noms et les paramtres quil utilise.
Puis on passe limplmentation: <composite:implementation> est le corps
du composant crit en XHTML avec des marqueurs JSF ou des templates.
2015/2016 Jav a Entreprise Edition : JEE 7 142

71
JSF : les composants
composites

2015/2016 Jav a Entreprise Edition : JEE 7 143

JSF : les composants composites


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:composite="http://xmlns.jcp.org/jsf/composite">
<com posite:interface>
<composite:attribute name="item " required="true"/>
<composite:attribute name="style" required="false"/>
</com posite:interface>
<com posite:implementation>
<tr style="#{compositeComponent.attrs.style}">
<td>Title :</td>
<td> <h:inputText value="#{compositeComponent.attrs.item.title}"/></td> </tr>
<tr style="#{compositeComponent.attrs.style}">
<td>Price :</td>
<td> <h:inputText value="#{compositeComponent.attrs.item.price}"/> </td> </tr>
<tr style="#{compositeComponent.attrs.style}"> <td>Description :</td>
<td> <h:inputTextarea value="#{compositeComponent.attrs.item.description}"
cols="20" row s="5"/> </td> </tr>
</com posite:implementation> </html>
2015/2016 Jav a Entreprise Edition : JEE 7 144

72
JSF : les composants composites
La page prcdente newItem.xhtml contient un composant composite.
Ce composant dclare une interface avec deux attributs : item reprsente
lentit Item (et les sous -classes Book et CD) et style une feuille de style CSS
utilise par la prsentation.
Ces attributs sont ensuite utiliss par limplmentation du composant par :
#{compositeComponent.attrs.style}
Ce code est un appel de la mthode getAttrib utes() du composant composite
courant ; le code recherche ensuite dans lobjet Map quelle renvoie la valeur
correspondant la cl style.
Le composant doit tre stock dans un fichier situ dans une bibliothque de
ressources. Dans notre exemple, le fichier newItem.xhtml a t plac dans le
rpertoire /resources/apress.
Lutilisation par dfaut du composant, ncessite de dclarer une bibliothque
apress et de lui associer un espace de noms XML :
<html xmlns:ago= ="http://xmlns.jcp.org/jsf/composite/apress">
2015/2016 Jav a Entreprise Edition : JEE 7 145

JSF : les composants composites


Puis on appelle le composant newItem (le nom de la page) en lui passant les
paramtres quil attend : item dsigne lentit Item et style est le paramtre
facultatif dsignant une feuille CSS :
<ago:newItem item="#{itemController.book}" style="myCssStyle" />
<ago:newItem item="#{itemController.cd}" />
Le code de la page suivante montre la page newBook.xhtml reprsentant le
formulaire pour entrer les informations sur un livre.
Elle inclut le composant newItem et ajoute des champs de saisie pour lISBN
et le nombre de pages, ainsi quune case cocher pour indiquer si le livre
contient, ou non, des illustrations

2015/2016 Jav a Entreprise Edition : JEE 7 146

73
JSF : les composants composites
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xm lns:ago="http://xmlns.jcp.org/jsf/composite/apress">
<h:head> <title>Creates a new book</title></h:head>
<h:body> <h1>Create a new book</h1>
<hr/> <h:form> <table border="0">
<ago:new Item item="#{itemController.book}"/>
<tr> <td> <h:outputLabel value="ISBN : "/> </td>
<td> <h:inputText value="#{itemController.book.isbn}"/> </td> </tr>
<tr> <td> <h:outputLabel value="Number of pages : "/> </td>
<td> <h:inputText value="#{itemController.book.nbOfPage}"/> </td> </tr>
<tr> <td> <h:outputLabel value="Illustrations : "/> </td>
<td> <h:selectBooleanCheckbox value="#{itemController.book.illustrations}"/> </td> </tr>
</table>
<h:commandButton value="Create a book" action="#{itemController.doCreateBook}"/>
</h:form> </h:body> </html>

2015/2016 Jav a Entreprise Edition : JEE 7 147

JSF : les objets implicites

Les objets implicites sont des identificateurs spciaux quune page peut
utiliser sans avoir besoin de les dclarer ou de les initialiser explicitement.
Ces objets sont :
Objet im plicite Description Type renvoy
application Reprsente lenvironnement de lapplication w eb. Object
Sert obtenir les paramtres de configuration de
cette application
applicationScope Associe les noms dattributs de lapplication Map
leurs valeurs
Component Dsigne le composant courant UIComponent
compositeComponent Dsigne le composant composite courant UIComponent
cookie Dsigne un Map contenant les noms des cookies Map
(cls) et des objets Cookie.
facesContext Dsigne linstance FacesContext de cette requte FacesContext
header Fait correspondre chaque nom den-tte HTTP Map
une seule valeur de type string
2015/2016 Jav a Entreprise Edition : JEE 7 148

74
JSF : les objets implicites
Objet im plicite Description Type
renvoy
headerValue Fait correspondre chaque nom den-tte HTTP un Map
tableau String[] contenant toutes les valeurs de cet en-tte.
initParam Fait correspondre chaque nom de paramtre une seule Map
valeur de type String.
paramValues Fait correspondre chaque nom de paramtre un tableau Map
String[] contenant toutes les valeurs de ce paramtre.
request reprsente lobjet requte HTTP Object
requestScope Fait correspondre les noms des attributs de la requte Map
leurs valeurs.
resource Indique lobjet ressource. Object
session Reprsente lobjet session http. Object
sessionScope Fait correspondre les noms des attributs de la session Map
leurs valeurs.
view Reprsente la vue courante UIView Root
view Scope Fait correspondre les noms des attributs de la vue leurs Map
valeurs.
2015/2016 Jav a Entreprise Edition : JEE 7 149

JSF : les objets implicites


Tous les objets numrs ont des interfaces : on peut accder leurs
attributs avec EL. #{view.Locale} permet dobtenir la locale de la vue
courante (en_US, pt_PT, etc.). On peut accder un livre stock dans
la porte de la session par : #{sessionScope.book}.
<h3>headerValues</h3>
<c:forEach var="parameter" items="#{headerValues}">
<h:outputText value="#{parameter.key}"/> =
<c:forEach var="value" items="#{parameter.value}">
<h:outputText value="#{value}" escape="false"/>
<br/>
</c:forEach>
</c:forEach>

Ce code affiche tous les enttes HTTP et leurs valeurs. Le rsultat est
affich dans la page suivante :
2015/2016 Jav a Entreprise Edition : JEE 7 150

75
JSF : les objets implicites

2015/2016 Jav a Entreprise Edition : JEE 7 151

76

Vous aimerez peut-être aussi