Académique Documents
Professionnel Documents
Culture Documents
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
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
Elle doit alors utiliser les langages compris par les navigateurs (HTML,
XHTML, CSS et JavaScript)
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>
3
Rappel : exemple de page HTML
Rappel : XHTML
XHTML a t cre aprs HTML 4.01. Ses racines puisent dans HTML,
mais avec une reformulation en XML strict.
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.
5
Rappel : exemple 2 de page XHTML
Rappel : CSS
CSS (Cascading Style Sheets) sert dcrire la prsentation dun
document crit en HTML ou en XHTML
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>
7
Rappel : exemple 3 de page CSS
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.
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).
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>
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 :
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.
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
12
Avantage des servlets par rapport aux CGI
Les technologies
13
Package Servlet
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
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);
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
17
Servlet : cycle de vie
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
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
20
Entte du Web.xml
Syntaxe de " web.xml " en servlet 3.0 (Tomcat 7 et Glassfish 3.1 ) :
Exemple 1 : excution
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);
}}
Exemple 2 :excution
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>" );
}}
Exemple 3 : excution
23
Atelier 1 : servlet
Tomcat
24
Vrification de linstallation
25
Cration dun projet web
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
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.
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
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
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.
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 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 " />
JSP : directives
La directive taglib dclare quune page utilise lune des bibliothques
standards en lidentifiant de faon unique par une URI et un prfixe.
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.
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 :
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>
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.
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
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 :
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>
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>
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}
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
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.
EL : avantages
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...
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.
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" >
43
JSTL : actions fondamentales
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>
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
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>
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
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 :
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>
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>
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
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>
52
JSTL : Fonctions
Lexemple prcdent affiche le rsultat suivant :
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.
53
Facelets
Les facelets ont t conu en tenant compte de JSF, elles fournissent un
modle de programmation plus simple que celui de JSF.
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.
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
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
57
JSF : les composants commandes
Les commandes sont les contrles sur lesquels lutilisateur peut cliquer
pour dclencher une action.
CommandButton est par dfaut de type sub mit. Pour associer une image,
on utilise lattribut image au lieu de lattribut value.
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
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.
59
JSF : les composants dentres
Le code de la page prcdente produit le rsultat suivant:
60
JSF : les composants de sortie
Exemple :
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
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" />
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>
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>
Marqueur Description
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
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">).
67
JSF : les templates
Lappel de la page layout.xhtml
affiche :
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
69
JSF : les composants composites
Tous les composants hritaient, directement ou indirectement, de la classe
javax.faces.componentUIComponent.
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
71
JSF : les composants
composites
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
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>
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
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
76