Vous êtes sur la page 1sur 27

1

J SF
J ava Server Faces
LAWT-SWING du WEB
Pagesjsp 1
Yves Bekkers
Introduction
Pagesjsp 2
J SF Quest-ce que cest ?
Une technologie de dveloppement dapplication
WEB (framework) qui dispense dcrire du code
J ava dans les interfaces
Qui offre
Deux librairies de composants graphiques
Pagesjsp 3
Mcanismes dvnements et de validation
Mcanisme de navigation de page en page
Gestion automatique de dobjets en arrire plan
Conue aussi pour faciliter la fabrication doutils
de dveloppements adquates (plus de 6 outils de
dveloppement connus)
Deux librairies
Librairie HTML (composants graphiques)
<%@t agl i b pr ef i x=" h"
ur i ="http://java.sun.com/jsf/html"%>
Pagesjsp 4
Librairie Core (validation, gestion des
vnements, conversions)
<%@t agl i b pr ef i x=" f"
ur i ="http://java.sun.com/jsf/core"%>
Librairie HTML
Inputs <h: i nput Text >, <h: i nput Text ar ea>
Outputs <h: out put Text >, <h: out put Label >
Commands <h: commandBut t on>
Selections <h: sel ect OneRadi o>
Pagesjsp 5
Selections <h: sel ect OneRadi o>,
<h: sel ect OneLi st box>, <h: sel ect OneMenu>
Layouts <h: panel Gr i d>
Data table <h: dat aTabl e>
Errors and messages <h: message>,
<h: messages>
Librairie core
<f:view> fentre principale
<f:subview> fentre secondaire au sein dune
fentre principale.
<f:validator> ajouter une validation un
composant.
Pagesjsp 6
p
<f:converter> ajouter un convertisseur un
composant.
<f:actionListener> ajouter un couteur
dvnement de type action.
<f:valueChangeListener> ajouter un couteur
dvnement de type changement de valeur.
2
Composants graphiques et rendu
Deux niveaux de vues
la vue abstraite ou modle, la vue concrte (rendu visuel)
Un mme composant abstrait peut avoir plusieurs rendus.
le composant UI Sel ect One possde les 3 rendus
Pagesjsp 7
Bouton radio
Case cocher
lment dune liste droulante
Le composant UI Command possde 2 rendus
Le lien hypertexte <commandLi nk>
Le bouton <commandBut t on>
Le composant abstrait UI I i nput
I UI nput possde 4 rendus
<h: i nput Hi den>Paramtres cachs
<h: i nput Secr et >Lignedetextesansespace
Pagesjsp 8
<h: i nput Secr et >Ligne de texte sans espace
rendu par des *
<h: i nput Text >Une ligne de texte
<h: i nput Text ar ea>Plusieurs lignes de texte
Rendus du composants UI I i nput
<h: i nput ext >
<h: i nput secr et >
Pagesjsp 9
<h: i nput hi dden>
<h: i nput Text Ar ea>
Listeners, validateur, convertisseurs
On peut nommer les composants graphiques
abstraits et leur associer des
Listeners
Validate rs
Pagesjsp 10
Validateurs
Convertisseurs
Des objets (java beans)
Beans UI abstrait UI concret
Conversion
validation
association
synchronisation
La page bonjour
<body>
<f : vi ew>
<h: out put Text val ue=" Bonjour !" / >
/ f i
Pagesjsp 11
</ f : vi ew>
</ body>
Second exemple un formulaire
<body>
<f : vi ew>
<h: f or m>
<h: commandBut t on act i on= " vert"
Pagesjsp 12
val ue=" GoToGreenPage" / >
<h: commandBut t on act i on= " bleu"
val ue=" GoToBluePage" / >
</ h: f or m>
</ f : vi ew>
</ body>
3
Exemples de tags J SF
<f : vi ew>
Conteneur des lments
hi bli i d
<%@t agl i b ur i =" http://java.sun.com/jsf/core" pr ef i x=" f" %>
<%@t agl i b ur i =" http://java.sun.com/jsf/html" pr ef i x=" h" %>
Pagesjsp 13
graphiques : obligatoire dans
toute page J SF
<h: f or m>
Formulaire
<h: commandBut t on>
Bouton de formulaire
Technologies concurrentes
Servlets et pages J SP
Pas de technologie dinterface base de composants
graphiques
Struts
Pas de technologie dinterface base de composants
graphiques
Pagesjsp 14
graphiques
Pas de modle dvnements
Pas de gestion de ltat de composants graphiques
Struts est li HTML pour son rendu
Spring
Trs rcent, voir
Bibliothques requises
jsf-api.jar
librairies j avax. f aces. *
jsf-imp.jar (oujsf-ri.jar)
limplementation des composants com. sun. f aces. *
jstl.jar et standard.jar
ncessaires pour utiliser les tags J STL tags et pour certaines
rfrences faites par lapi J avaServer Faces (internationalisation )
b til j
Pagesjsp 15
commons-beanutils.jar
manipulation des javabeans
commons-digester.jar
Manipulation des documents XML
commons-collections.jar
extensions deJ ava2 SDK (Col l ect i ons)
commons-logging.jar
des facilits gnriques pour crer des fichiers delog
Fichier web. xml
Dclaration de la servlet controleur J SF
<!-- Faces Servlet -->
<ser vl et >
<ser vl et - name>Faces Ser vl et </ ser vl et - name>
<ser vl et - cl ass>
/
Pagesjsp 16
j avax. f aces. webapp. FacesSer vl et </ ser vl et - cl ass>
<l oad- on- st ar t up>1</ l oad- on- st ar t up>
</ ser vl et >
<!-- Faces Servlet Mapping -->
<ser vl et - mappi ng>
<ser vl et - name>Faces Ser vl et </ ser vl et - name>
<ur l - pat t er n>*. j sf </ ur l - pat t er n>
</ ser vl et - mappi ng>
Fichier de configuration
Fichier de configuration faces-config.xml
Dfinir la navigation de paga en page
Dfinir lesinstancesdobjetsdarrireplan(les
Pagesjsp 17
Dfinir les instances d objets d arrire plan (les
backing beans)
Dfinir des classes de validation de donnes
Dfinir des classes dcoute dvnements
Fonctionnement
Pagesjsp 18
4
J SF comment a marche
Chaque page est caractrise par un arbre de
composants graphiques
Une servlet contrleur construit les pages avec leurs
composants graphiques (Input type, label, table...)
i l l t d l h d t l tif
Pagesjsp 19
puis la servlet dclenche des vnements relatifs
chacun des composants de la page.
Les valeurs affiches ou saisies dans les composants
graphiques peuvent tre associes des attributs
dinstances dobjets grs automatiquement en arrire
plan de lapplicationles backing beans
Cycle de vie dune requte J SF
Rception
des valeurs
Validation
d l
VueJ SF
Requt
e
Construction de la vue interne
Reception des valeurs par le contrleur
+ Convertion des valeurs
1
2
3
Pagesjsp 20
Mise jour
des beans
des valeurs
Traitement
(application)
Rendu dela
rponse
Rponse
Gestion des evts +
Calcul de la navigation
4
5
6
tapes 1-2
1 - Constrution de la vue dentre : recrer
l'arborescence des composants qui composent la
page dorigine. Cette arborescence est stocke
dans un objet de type FacesContext et sera utilise
tout au long du traitement de la requte.
Pagesjsp 21
2 - Rception des valeurs trouves dans le
FaceContext. Durant cette phase des oprations de
convertions sont ralises pour permettre de
transformer les valeurs stockes sous forme de
chane de caractres dans la requte HTTP en un
type utilis pour le stockage des donnes.
tapes 3 - 4
3 - Validation : les donnes extraites sont
valides en appliquant des validateurs enregistrs
auprs de chaque composant. Les ventuelles
erreurs de conversions sont stockes dans le
FaceContext. Dans ce cas derreur, l'tape suivante
est directement ltape 6 pour rafficher la mme
Pagesjsp 22
page avec les valeurs saisies et signifier les erreurs
4 - Synchronisation du modle : Cette tape
permet de stocker dans les composants du
FaceContext leur valeur locale valide respective.
Les ventuelles erreurs de conversions sont
stockes dans le FaceContext. Dans ce cas, l'tape
suivante est directement ltape 6
tapes 5-6
5 - Invoquer lapplication : dans cette tape, le
ou les vnements mis dans la page sont traits.
On dtermine quelle sera la page rsultat qui sera
renvoyedanslarponseenutilisant lesrglesde
Pagesjsp 23
renvoye dans la rponse en utilisant les rgles de
navigation dfinie dans l'application.
L'arborescence des composants de cette page
rsultat est cre.
6 - Rendu de la rponse : cette tape se charge de
crer le rendue de la page de la rponse.
Identification des 6 phases
Possibilit de spcifier des l i st er ner s dclanchs aux
instants significatifs des phases dexcution du contrleur
La classe j avax. f aces. event . PhaseI d dfinit des
constantes qui identifient chacune des 6 phases
PhaseI d. RESTORE_VI EW,
PhaseI d APPLY REQUEST VALUES
Pagesjsp 24
PhaseI d. APPLY_REQUEST_VALUES,
PhaseI d. PROCESS_VALI DATI ONS,
PhaseI d. UPDATE_MODEL_VALUES,
PhaseI d. I NVOKE_APPLI CATI ON
PhaseI d. RENDER_RESPONSE
La constante PhaseI d. ANY_PHASE permet de demander
l'application du l i st ener toutes les phase (debuggage)
5
Exemple : Ecout eur (traceur)
Un couteur implmente la classe
j avax. f aces. event . PhaseLi st ener
import j avax. f aces. event . PhaseEvent ;
import j avax. f aces. event . PhaseI d;
import j avax. f aces. event . PhaseLi st ener ;
public class Ecout eur implements PhaseLi st ener {
public void af t er Phase( PhaseEvent pe) {
Pagesjsp 25
public void af t er Phase( PhaseEvent pe) {
Syst em. out . pr i nt l n( "Apres " + pe. get PhaseI d( ) ) ;
}
public void bef or ePhase( PhaseEvent pe) {
Syst em. out . pr i nt l n( "Avant " + pe. get PhaseI d( ) ) ;
}
public PhaseId get PhaseI d( ) {
return PhaseId.ANY_PHASE;
}
Enregistrement dun
PhaseLi st ener
Fichier de configuration server Faces
<f aces- conf i g>
. . .
<l i f ecycl e>
Pagesjsp 26
<l i f ecycl e>
<phase- l i st ener >l i b. PhasesEcout eur
</ phase- l i st ener >
</ l i f ecycl e>

</ f aces- conf i g>


Exemple dexcution de la classe
Ecout eur
Avant RESTORE_VI EW1
Apr es RESTORE_VI EW1
Avant APPLY_REQUEST_VALUES 2
Apr es APPLY_REQUEST_VALUES 2
Avant PROCESS_VALI DATI ONS 3
Pagesjsp 27
_
Apr es PROCESS_VALI DATI ONS 3
Avant UPDATE_MODEL_VALUES 4
Apr es UPDATE_MODEL_VALUES 4
Avant I NVOKE_APPLI CATI ON 5
Apr es I NVOKE_APPLI CATI ON 5
Avant RENDER_RESPONSE 6
Apr es RENDER_RESPONSE 6
Toutes les phases ne sont pas
toujours excutes
Exemple dexcution avec une erreur de validation
Avant RESTORE_VI EW1
Apr es RESTORE_VI EW1
Avant APPLY REQUEST VALUES 2
Pagesjsp 28
Avant APPLY_REQUEST_VALUES 2
Apr es APPLY_REQUEST_VALUES 2
Avant PROCESS_VALI DATI ONS 3
Apr es PROCESS_VALI DATI ONS 3
Avant RENDER_RESPONSE 6
Apr es RENDER_RESPONSE 6
Structure dune application J SF
/ WebCont ent
/ WEB- I NF
/ cl asses
/ l i b
j sf - i mpl . j ar Librairies de tags
Classes J ava (beans )
Pagesjsp 29
j s p j a
j sf - api . j ar
f aces- conf i g. xml
web. xml
/ pages
i nput name. j sp
gr eet i ng. j sp Pages jsp-html
g
Config Servlet
Config JFace
web. xml : Un contrleur faces
<web- app>
<! Contrleur Faces Servlet - - >
<ser vl et >
<ser vl et - name>Faces Servlet</ ser vl et - name>
<ser vl et - cl ass>javax.faces.webapp.FacesServlet
</ ser vl et - cl ass>
<l oad- on- st ar t up> 1 </ l oad- on- st ar t up>
/
Pagesjsp 30
</ ser vl et >
<! - - Faces Servlet Mapping - - >
<ser vl et - mappi ng>
<ser vl et - name>Faces Servlet</ ser vl et - name>
<ur l - pat t er n>/faces/*</ ur l - pat t er n>
</ ser vl et - mappi ng>
</ web- app>
6
web. xml + f aces- conf i g. xml
<web- app>
<cont ext - par am>
<par am- name>javax.faces.STATE_SAVING_METHOD
</ par am- name>
<par am- val ue>server</ par am- val ue>
</ cont ext - par am>
<cont ext - par am>
<par am- name>javax faces CONFIG FILES</ par am- name>
Pagesjsp 31
<par amname>javax.faces.CONFIG_FILES</ par amname>
<par am- val ue>/WEB-INF/faces-config.xml</ par am- val ue>
</ cont ext - par am>
<l i st ener >
<l i st ener -
cl ass>com.sun.faces.config.ConfigureListener
</ l i st ener - cl ass>
</ l i st ener >
. . .
Fichier de configuration J Face
Structure du document
<?xml ver si on=" 1. 0" ?>
<! DOCTYPE f aces- conf i g PUBLI C
" - / / Sun Mi cr osyst ems, I nc. / / DTD
J avaSer ver Faces Conf i g 1 1/ / EN"
Pagesjsp 32
J avaSer ver Faces Conf i g 1. 1/ / EN"
" ht t p: / / j ava. sun. com/ dt d/ web-
f acesconf i g_1_1. dt d" >
<f aces- conf i g>
<navi gat i on- r ul e> </ navi gat i on- r ul e>
<managed- bean> </ managed- bean>
</ f aces- conf i g>
Fichier de configuration J Face
<appl i cat i on>
Configuration de lapplication
<f act or y>
Remplacement de certaines fabriques
(FacesCont ext Fact or y, )
<component >
Dfinition de composants graphiques
Pagesjsp 33
<conver t er >
Dfinition de convertisseurs
<managed- bean>
Dfinition dobjets autogrs
<navi gat i on- r ul e>
Dfinition des rgles de navigation
<r ender - ki t >
Dfinition dun kit de rendu
<val i dat or >
Dfinition de validateurs
Enregistrement de la classe
Ecout eur
Dclaration dans le fichier de configuration
Faces faces-config.xml
<f aces- conf i g>
Pagesjsp 34
. . .
<l i f ecycl e>
<phase- l i st ener >myLi b. Ecout eur </ phase- l i st ener >
</ l i f ecycl e>
. . .
</ f aces- conf i g>
Navigation
Pagesjsp 35
Soumettre un formulaire
Lancer une action
Gestion par J SF : deux mthodes
Le bouton
<h: commandBut t on i d=" submit" val ue=
"Next" act i on=" nextPage"/ >
Next
Pagesjsp 36
g
Le lien (utilise J avascript )
<h: commandLi nk i d=" link"
act i on=" goto">
<h: out put Text val ue="Next page"/ >
</ h: commandLi nk>
Next Page
7
Navigation dirige par des chanes
" vert"
"retour"
Pagesjsp 37
"bleu"
"retour"
i ndex. j sp
<body>
<f:view>
<h:form>
<h dB tt ti " t" l "G T G P " />
Pagesjsp 38
<h:commandButton action="vert" value="GoToGreenPage" />
<h:commandButton action="bleu" value="GoToBluePage" />
</h:form>
</f:view>
</body>
gr een. j sp
<body bgcolor="darkgreen">
<f:view>
<h:form>
<h:commandButton action="back" value="GoBack" />
Pagesjsp 39
</h:form>
</f:view>
</body>
bl ue. j sp
<body bgcolor="darkblue">
<f:view>
<h:form>
<h:commandButton action="back" value="GoBack" />
Pagesjsp 40
</h:form>
</f:view>
</body>
f aces- conf i g. xml rgles de
navigation (1)
<navigation-rule>
<from-view-id>/index.jsp</from-view-id>
<navigation-case>
<from-outcome>vert</from-outcome>
Pagesjsp 41
<to-view-id>/green.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>bleu</from-outcome>
<to-view-id>/blue.jsp</to-view-id>
</navigation-case>
</navigation-rule>
f aces- conf i g. xml rgles de
navigation (2)
<navigation-rule>
<from-view-id>/green.jsp</from-view-id>
<navigation-case>
<from-outcome>back</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation-case>
Pagesjsp 42
g
</navigation-rule>
<navigation-rule>
<from-view-id>/blue.jsp</from-view-id>
<navigation-case>
<from-outcome>back</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>
8
Navigation rules (2) simplification
<navigation-rule>
<navigation-case>
<from-outcome>back</from-outcome>
<to viewid>/index jsp</to viewid>
Pagesjsp 43
<to-view-id>/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Navigation calcule :
langage dexpression
Expression dans lattribut action du bouton
<h: commandBut t on val ue=" annuler"
act i on=" #{myBean.eval}" / >
Pagesjsp 44
Fait appel une mthode dun bean qui
rend un rsultat St r i ng
public String eval ( ) {
if ( t est ) return " false"
return " true"
}
J avaBeans Superviss
Pagesjsp 45
Deux pages
JavaBean
Personne
nom
Pagesjsp 46
i nput name. j sp gr eet i ng. j sp
Lier linterface aux J avabeans
inputName.jsp
<h:inputText value="#{laPersonne.nom}"/>
Pagesjsp 47
faces-config.xml
<managed-bean>
<managed-bean-name>
laPersonne
</managed-bean-name>
<managed-bean-class>
lib.PersonBean
</managed-bean-class>
PersonBean.java
public class PersonBean {
private String nom;
public String getNom() {
public void setNom(String nom) {
J avaBean
public class Per sonBean {
private St r i ng nom;
public St r i ng get Nom( ) {
return nom;
Pagesjsp 48
return nom;
}
public void set Nom( St r i ng nom) {
this. nom= nom;
}
}
9
Dclaration des instances de bean
Au sein du fichier f aces- conf i g. xml
<f aces- conf i g>
. . .
<managed- bean>
Pagesjsp 49
<managed- bean- name>laPersonne</ managed- bean- name>
<managed- bean- cl ass>lib.PersonBean</ managed- bean- cl ass>
<managed- bean- scope>request</ managed- bean- scope>
</ managed- bean>
. . .
</ f aces- conf i g>
inputName.jsp : formulaire
<h1><h: out put Text val ue=" JSF sans effort" / ></ h1>
<h: f or mi d=" helloForm" >
<h: out put Text val ue=" Donner votre nom" / >
<h: i nput Text val ue="#{laPersonne.nom}" / >
<h: commandBut t on act i on=" greeting" val ue="Dire
bonjour" / >
Pagesjsp 50
</ h: f or m>
La valeur saisie dans le
composant inputText est
transfre automatiquement
Dans le Champ nom du
Javabean laPersonne
greeting.jsp
<%@t agl i b ur i =" ht t p: / / j ava. sun. com/ j sf / ht ml " pr ef i x=" h" %>
<%@t agl i b ur i =" ht t p: / / j ava. sun. com/ j sf / cor e" pr ef i x=" f " %>
<ht ml >
<head><t i t l e>gr eet i ng page</ t i t l e></ head>
<body>
<f : vi ew>
<h3>
<h: out put Text val ue=" Bienvenue JSF" / >
<h o t p t Te t al e " #{laPersonne nom}" / >
Pagesjsp 51
<h: out put Text val ue=" #{laPersonne.nom}" / >
<h: out put Text val ue=" !" / >
</ h3>
</ f : vi ew>
</ body>
</ ht ml >
Configuration J Face (1)
Rgles de navigation
<navi gat i on- r ul e>
<f r om- vi ew- i d>/pages/inputname.jsp</ f r om- vi ew- i d>
<navi gat i on- case>
<f t >greeting</ f t >
Pagesjsp 52
<f r om- out come>greeting</ f r om- out come>
<t o- vi ew- i d>/pages/greeting.jsp</ t o- vi ew- i d>
</ navi gat i on- case>
</ navi gat i on- r ul e>
i nput name. j sp gr eet i ng. j sp
" greeting "
Configuration J Face (2)
Gestion des J avaBeans
<managed- bean>
<managed- bean- name>laPersonne</ managed- bean- name>
<managed- bean- cl ass>lib.PersonBean</ managed- bean- cl ass>
Pagesjsp 53
managed bean cl ass lib.PersonBean / managed bean cl ass
<managed- bean- scope>request</ managed- bean- scope>
</ managed- bean>
PersonneBean
nom
Valeur par dfaut dune proprit
de bean
<managed- bean>
<managed- bean- name>laPersonne</ managed- bean- name>
<managed- bean- cl ass>lib.PersonBean</ managed- bean- cl ass>
<managed- bean- scope>request</ managed- bean- scope>
< d t >
Pagesjsp 54
<managed- pr oper t y>
<pr oper t y- name>nom</ pr oper t y- name>
<val ue>Dupont</ val ue>
</ managed- pr oper t y>
</ managed- bean>
10
Lire en J ava des beans
Pagesjsp 55
Lire un bean en java (1)
Sans cration du bean (peut rendre null)
FacesCont ext cont ext =
FacesCont ext . get Cur r ent I nst ance( ) ;
Ext er nal Cont ext
ct x=cont ext . get Ext er nal Cont ext ( ) ;
Map map = ct x. get Appl i cat i onMap( ) ;
Message mess = ( Message) map. get ( " mess" ) ;
Pagesjsp 56
Lire un bean en java (2)
Avec cration du beansi ncessaire
FacesCont ext cont ext =
FacesCont ext . get Cur r ent I nst ance( ) ;
Appl i cat i on app = cont ext . get Appl i cat i on( ) ;
Var i abl eResol ver r esol ver =
app. get Var i abl eResol ver ( ) ;
Message mess = ( Message) r esol ver .
r esol veVar i abl e( cont ext , " mess" ) ;
Pagesjsp 57
Evaluer une expression en J ava
Avec cration du bean si ncessaire
FacesCont ext cont ext =
FacesCont ext . get Cur r ent I nst ance( ) ;
Appl i cat i on app = cont ext . get Appl i cat i on( ) ;
Val ueBi ndi ng bi ndi ng =
app. cr eat eVal ueBi ndi ng( " #{" + expr + " }" ) ;
Obj ect val ue = bi ndi ng. get Val ue( cont ext ) ;
Pagesjsp 58
Message de log
FacesCont ext . get Cur r ent I nst ance( ) .
get Ext er nal Cont ext ( ) . l og( " un message" ) ;
Pagesjsp 59
Modle MVC
Pagesjsp 60
Un exemple
11
Calculateur
add
Pagesjsp 61
Modle
public class Cal cul at or {
public int add( int a, int b) {
return a + b;
Pagesjsp 62
}
public int mul t i pl y( int a, int b) {
return a * b;
}
}
Controleur
Pagesjsp 63
Controleur 1
public class Cal cul at or Cont r ol l er {
private Cal cul at or cal cul at or = new Cal cul at or ( ) ;
private int f i r st Number = 0;
Pagesjsp 64
p ate t st u be 0;
private int secondNumber = 0;
private int r esul t = 0;
public Cal cul at or Cont r ol l er ( ) {
super( ) ;
}

Controleur 2
public void set Fi r st Number ( int aFi r st Number ) {
this. f i r st Number = aFi r st Number ;
}
public int get Fi r st Number ( ) {
return f i r st Number ;
}
Pagesjsp 65
public int get Resul t ( ) {
return r esul t ;
}
public void set SecondNumber ( int aSecondNumber ) {
this. secondNumber = aSecondNumber ;
}
public int get SecondNumber ( ) {
return secondNumber ;
}
Controleur 3
public St r i ng add( ) {
r esul t = cal cul at or . add( f i r st Number ,
secondNumber ) ;
return " success" ;
Pagesjsp 66
return success ;
}
public St r i ng mul t i pl y( ) {
r esul t = cal cul at or . mul t i pl y( f i r st Number ,
secondNumber ) ;
return " success" ;
}
12
Bean supervis
<managed- bean>
<managed- bean- name>
CalcBean
</ managed- bean- name>
<managed- bean- cl ass>
Pagesjsp 67
<managed bean cl ass>
fr.ifsic.test.CalculatorController
</ managed- bean- cl ass>
<managed- bean- scope>
session
</ managed- bean- scope>
</ managed- bean>
Rgle de navigation
<navi gat i on- r ul e>
<f r om- vi ew- i d>
/calculator.jsp
</ f r om- vi ew- i d>
Pagesjsp 68
</ f r omvi ew i d>
<navi gat i on- case>
<f r om- out come>success</ f r om- out come>
<t o- vi ew- i d>/result.jsp</ t o- vi ew- i d>
</ navi gat i on- case>
</ navi gat i on- r ul e>
cal cul at or . j sp
Pagesjsp 69
cal cul at or . j sp 1
<ht ml xml ns=" ht t p: / / www. w3. or g/ 1999/ xht ml "
xml ns: h=" ht t p: / / j ava. sun. com/ j sf / ht ml "
xml ns: f =" ht t p: / / j ava. sun. com/ j sf / cor e" >
<f : vi ew>
Pagesjsp 70
<f : vi ew>
<h: f or mi d=" cal cFor m" >

</ h: f or m>
</ f : vi ew>
</ ht ml >
cal cul at or . j sp 2
<h: panel Gr i d col umns=" 3" >
<h: out put Label val ue=" Fi r st Number " / >
<h: i nput Text i d=" f i r st Number "
val ue=" #{CalcBean.firstNumber}"
r equi r ed=" t r ue" / >
<h: message f or =" f i r st Number " / >
Pagesjsp 71
g /
<h: out put Label val ue=" Second Number " / >
<h: i nput Text i d=" secondNumber "
val ue=" #{CalcBean.secondNumber}"
r equi r ed=" t r ue" / >
<h: message f or =" secondNumber " / >
</ h: panel Gr i d>
cal cul at or . j sp 3
<h: panel Gr oup>
<h: commandBut t on i d="submi t Add"
act i on="#{CalcBean.add}"
val ue="Add" / >
Pagesjsp 72
val ue="Add" / >
<h: commandBut t on
i d="submi t Mul t i pl y"
act i on="#{CalcBean.multiply}"
val ue="Mul t i pl y" / >
</ h: panel Gr oup>
13
r esul t . j sp
Pagesjsp 73
r esul t . j sp 1
<f : vi ew>
Fi r st Number : <h: out put Text
i d=" f i r st Number "
val ue=" #{CalcBean.firstNumber}" / >
<br / >
Pagesjsp 74
Second Number : <h: out put Text
i d=" secondNumber "
val ue=" #{CalcBean.secondNumber}" / >
<br / >
Resul t : <h: out put Text i d=" r esul t "
val ue=" #{CalcBean.result}" / >
<br / >
</ f : vi ew>
Langage dexpression
Pagesjsp 75
Langage dexpression EL
Valeur Expression
Boolen car t . number Of I t ems>0
lment de tableau books[ 2]
l d ll i b k [ " f i t i " ]
Pagesjsp 76
lment dans une collection books[ " f i ct i on" ]
Proprit dun J ava bean l aPer sonne. nom
Proprit dun objet dans un
tableau
books[ 3] . pr i x
Proprit initialise dun
paramtre i ni t du contexte
i ni t Par am. quant i t e
Liste des objets implicites
appl i cat i onScope
Attributs de lapplication (Map)
cooki e
Cookies (Map)
f aceCont ext
Instance courante du contexte
Pagesjsp 77
header
HTTP headers (Map)
header Val ues
HTTP headers (Map of St r i ng[ ] )
i ni t Par am
Paramtres dinitialisation de lappli
par am
Paramtres de la requte (Map)
Liste des objets implicites (2)
r equest Scope
Attributs de la requte (Map)
sessi onScope
Attributsdelasession(Map)
Pagesjsp 78
sessi onScope
Attributs de la session (Map)
vi ew
La racine de larborescence des
composants pour cette requte
14
Oprateurs
+ - * / %di v mod oprateurs arithmtique
< <= > >= == ! =
l t l e gt ge eq ne
oprateurs de
comparaisons
Pagesjsp 79
&& | | ! and or not oprateurs logiques
Empt y un objet null, une chane
vide, un tableau ou une
collection sans lement,
? : oprateur ternaire de test
Internationalisation
Gestion de la langue
Pagesjsp 80
Gestion des dates/heures
.
Que peut-on internationaliser
Messages (dtat ou derreur)
Labels (simples ou sur les composants graphiques)
Dates et heures
N b l t i
Pagesjsp 81
Nombres, valeurs montaires
Numros de tlphone, adresses
Formules de politesse
Graphiques, images, couleurs, sons,
Et mme la disposition des pages !
Internationaliser les chanes ?
En anglais En franais
Pagesjsp 82
Messages_f r . pr oper t i es
ent et e_champNom= JSF sans effort
pr ompt = Donner votre nom :
si gne = !
t ext eDeBi envenue = Bienvenue JSF
Pagesjsp 83
t ext eDuBout on = Dire bonjour
Messages_en. pr oper t i es
ent et e_champNom= JSF KickStart
pr ompt = Tell us your name
si gne = !
t ext eDeBi envenue = Welcome to JSF,
t ext eDuBout on = Say Hello
Pagesjsp 84
y
15
<f : l oadBundl e> <h: out put Text >
<%@t agl i b ur i =" http://java.sun.com/jsf/html" pr ef i x=" h" %>
<%@t agl i b ur i =" http://java.sun.com/jsf/core" pr ef i x=" f" %>
<f : l oadBundl e basename=" lib.messages" var =" msg" / >
<ht ml >
<head>
<t i t l e>Page pour ent r er vot r e nom</ t i t l e>
Lecture des messages
Pagesjsp 85
<t i t l e>Page pour ent r er vot r e nom</ t i t l e>
</ head>
<body>
<f : vi ew>
<h1><h: out put Text val ue=" #{msg.entete_champNom}" / ></ h1>
. . . fomulaire . . .
</ f : vi ew>
</ body>
</ ht ml >
Utilisation dun des messages
Fichier de configuration
Les langues dans le fichier de configuration
<f aces- conf i g>
. . .
<appl i cat i on>
<l ocal e- conf i g>
Pagesjsp 86
<l ocal e conf i g>
<def aul t - l ocal e>f r </ def aul t - l ocal e>
<suppor t ed- l ocal e>en</ suppor t ed- l ocal e>
</ l ocal e- conf i g>
</ appl i cat i on>
. . .
</ f aces- conf i g>
Recherche dun fichier de proprits
Lorsque lutilisateur donne un ordre de prfrences
(dans son navigateur)
Pour chaque prfrence prise dans lordre de lutilisateur
j h h l b fi hi d l d
Pagesjsp 87
java cherche le bon fichier dans lordre :
1. Resources_language_country_variant.properties
2. Resources_language_country.properties
3. Resources_language.properties
4. Resources.properties
<h: out put For mat >
Message paramtr
Dclaration dans le fichier de ressources
mess = bonjour Mr {0}
Utilisationdansuncomposant J SF
Pagesjsp 88
Utilisation dans un composant J SF
<h: out put For mat val ue="#{msg.mess}">
<f : par amval ue="#{myBean.nom}"/ >
</ h: out put For mat >
Chargement dun fichier de
pr oper t i es par programme
Les fichiers de messages
/ games/ messsages. pr oper t i es peuvent tre
capts par progamme comme suit : :
Pagesjsp 89
FacesCont ext cont ext =
FacesCont ext . get Cur r ent I nst ance( ) ;
Resour ceBundl e msg =
Resour ceBundl e. get Bundl e( "game.messages" ,
cont ext . get Vi ewRoot ( ) . get Local e( ) ) ;
St r i ng t ext e = msg. get St r i ng( " how_to_play") ;
Sortie conditionnelle
Attribut r ender ed
<h: out put Text val ue=" Je vous ai
reconnu"
Pagesjsp 90
reconnu
r ender ed=" #{PersonneBean.user
Name=='bekkers'}" / >
16
Librairie core (1)
f : vi ew, f : subvi ew
Vue principale, sous-vue
f : f acet
Qualifier un lment
f : at t r i but e
Ajouter un attribut, un composant
f : par am
Passer un paramtre un composant
Pagesjsp 91
f : l oadBundl e
charger un fichier de properties
f : ver bat i m
ajouter un texte brut la vue
f : sel ect I t em
Un lment dans un composant
choix
f : sel ect I t ems
Groupe dlments dans un
composant choix
Librairie core (2)
f : act i onLi st ener Ajouter un listener daction
composant
f : conver t Dat eTi me
Conversion date/heure
f : conver t Number
Conversion numrique
f : val i dat or
Ajouter un validateur spcifique
Pagesjsp 92
j p q
f : val i dat eDoubl eRange
Validation plage de rels
f : val i dat eLengt h
Validation longueur de valeur
f : val i dat eLongRange
Validation plage dentiers
f : val ueChangeLi st ener
Associer un listener de changement
de valeur un composant
<f:setPropertyActionListener>
Il doit obligatoirement tre dfini comme
fils d'un composant d'action
<h: commandLi nk>, <h: commandBut t on>.
Pagesjsp 93
Affecter une valeur une cible avant
l'excution d'une action donne
Deux attributs
target Le champ cible ( qui la valeur sera affecte)
value La valeur affecter au champ cible
Ajouter des objets aux composants html
La plupart des tags de la librarie core ajoutent
des objets aux composants html
Attribute
Listener
Pagesjsp 94
Listener
Converter
Validator
Facet
Parameter
Select item
Librairie html
Pagesjsp 95
<h: out put Text >
<h: gr aphi cI mage>
<h: out put Text
val ue=" #{f or m. t est St r i ng}" / >
<h: out put Text val ue=" Number
#{f or m. number }" / >
<h: out put Text val ue=" <i nput t ype= t ext
val ue= hel l o / >" / >
Pagesjsp 96
val ue hel l o / > / >
<h: out put Text escape=" t r ue"
val ue=" <i nput t ype= t ext
val ue= hel l o / >" / >
<h: gr aphi cI mage
val ue=" / t j ef f er son. j pg" / >
<h: gr aphi cI mage val ue=" / t j ef f er son. j pg"
st yl e=" bor der : t hi n sol i d bl ack" / >
17
<h: out put For mat > <f : par am>
Texte paramtr
<h: out put For mat val ue=" {0} est
ag de {1} ans" >
Pagesjsp 97
<f : par amval ue=" Jaques" / >
<f : par amval ue=" 25" / >
</ h: out put For mat >
<h: panel Gr oup>
Regroupements
<h: panel Gr oup>
<h: out put Text val ue=" one r ow" / >
<h: out put Text val ue=" " / >
Pagesjsp 98
<h: out put Text
val ue=" gr ouped wi t h panel Gr oup" / >
</ h: panel Gr oup>
one r ow gr ouped wi t h panel Gr oup
Affichage conditionnel dun groupe
Attribut @renderer
<h: panel Gr oup r ender ed=" #{myBean.number>10}" >
<h: out put Label i d=" isl2" f or =" is2" >
h l " bl bl " /
Pagesjsp 99
<h: out put Text val ue=" blabla" / >
</ h: out put Label >
<h: i nput Text i d=" is2" / >
<h: commandBut t on val ue=" Go!" / >
</ h: panel Gr oup>
<h: i nput Text >
<h: i nput Secr et >
<h: i nput Text val ue=" #{f or m. t est St r i ng}"
r eadonl y=" t r ue" / >
<h: i nput Secr et val ue=" #{f or m. passwd}"
r edi spl ay=" t r ue" / >
<h: i nput Secr et val ue=" #{f or m. passwd}"
I mpossible d'afficher l'imagelie. Le fichier a peut-tre t dplac, renomm ou supprim. Vrifiez que la liaison pointe vers le fichier et l'emplacement corrects.
I mpossible d'afficher l'imagelie. Le fichier a peut-tre t dplac, renomm ou supprim. Vrifiez que la liaison pointe vers le fichier et l'emplacement corrects.
I mpossible d'afficher l'imagelie. Le fichier a peut-tre t dplac, renomm ou supprim. Vrifiez que la liaison pointe vers le fichier et l'emplacement corrects.
Pagesjsp 100
r edi spl ay=" f al se" / >
<h: i nput Text val ue=" i nput Text "
st yl e=" col or : Yel l ow;
backgr ound: Teal ; " / >
<h: i nput Text val ue=" 1234567" si ze=" 5" / >
<h: i nput Text val ue=" 1234567890"
maxl engt h=" 6" si ze=" 10" / >
I mpossible d'afficher l'imagelie. Le fichier a peut-tre t dplac, renomm ou supprim. Vrifiez que la liaison pointe vers le fichier et l'emplacement corrects.
I mpossible d'afficher l'image lie. Le fichier a peut-tre t dplac, renomm ou supprim. Vrifiez quela liaison pointe vers le fichier et l'emplacement corrects.
I mpossible d'afficher l'image lie. Le fichier a peut-tre t dplac, renomm ou supprim. Vrifiez que la liaison pointe vers lefichier et l'emplacement corrects.
<h: i nput Text ar ea>
<h: i nput Text ar ea r ows=" 5" / >
<h: i nput Text ar ea col s=" 5" / >
Pagesjsp 101
<h: i nput Text ar ea
val ue=" 123456789012345"
r ows=" 3" col s=" 10" / >
<h: i nput Text ar ea
val ue=" #{f or m. dat aI nRows}"
r ows=" 2" col s=" 15" / >
<h: commandBut t on>
<h: commandLi nk>
Navigation J SF
<h: commandBut t on val ue=" submi t "
t ype=" submi t "/ >
Pagesjsp 102
<h: commandLi nk>
<h: out put Text val ue="r egi st er "/ >
</ h: commandLi nk>
<h: commandLi nk>
<h: out put Text val ue=" #{msgs. l i nk}" / >
<h: gr aphi cI mage val ue="/ r egi s. j pg" / >
</ h: commandLi nk>
18
<h: out put Li nk>
Liens html simples
<h: out put Li nk val ue=" #i nt r oduct i on" >
<h: out put Text val ue=" I nt r oduct i on"
st l e "f ont st l e i t al i c"/ >
Pagesjsp 103
st yl e="f ont - st yl e: i t al i c"/ >
</ h: out put Li nk>
<h: out put Li nk val ue=" #t oc
t i t l e="Go t o t he t abl e of cont ent s" >
<f : ver bat i m>
<h2>Tabl e of Cont ent s</ h2>
</ f : ver bat i m>
</ h: out put Li nk>
<h: panel Gr i d> Tableaux
<h: panel Gr i d col umns=" 4" f oot er Cl ass=" subt i t l e"
header Cl ass=" subt i t l ebi g" st yl eCl ass=" medi um"
col umnCl asses=" subt i t l e, medi um" >
<f : f acet name=" header " >
<h: out put Text val ue=" Tabl e wi t h number s" / >
</ f : f acet >
<h: out put Text val ue="1" / ><h: out put Text val ue=" 2" / >
Classes CSS
Pagesjsp 104
<h: out put Text val ue= 1 / ><h: out put Text val ue= 2 / >
<h: out put Text val ue="3" / ><h: out put Text val ue=" 4" / >
<h: out put Text val ue="5" / ><h: out put Text val ue=" 6" / >
<h: out put Text val ue="7" / >
<f : f acet name=" f oot er " >
<h: out put Text val ue=bl abl a" / >
</ h: panel Gr oup>
</ f : f acet >
</ h: panel Gr i d>
<h: panel Gr i d> rendu
Table with numbers
blabla
Pagesjsp 105
1 2 3 4
5 6 7
List, tableau
<h: dat aTabl e> <h: col umn>
<h: dat aTabl e i d=" books" val ue=" #{BookStore.items}"
var =" store" >
<h: col umn>
<f : f acet name=" header " >
<h: out put Text val ue=" #{msg. st or eNameLabel }" / >
</ f : f acet >
<h: out put Text val ue=" #{store.name}" / >
</ h: col umn>
<h: col umn>
Pagesjsp 106
<f : f acet name=" header " >Subj ect </ f : f acet >
<h: out put Text val ue=" #{store.subject}" / >
</ h: col umn>
<h: col umn>
<f : f acet name=" header " >
<h: out put Text val ue=" #{msg. st or ePr i ceLabel }" / >
</ f : f acet >
<h: out put Text val ue=" #{store.price}" / >
</ h: col umn>
</ h: dat aTabl e>
<h: dat aTabl e> <h: col umn>
rendu
Title Subject Price ($)
J SF For J SF 25.0
Pagesjsp 107
J SF For
Dummies
J SF 25.0
Struts For
Dummies
Struts 22.95
Attribut @val ue dun lment
<h: dat aTabl e>
@val ue reprsente une collection sur la quelle
litration sur les lignes du tableau porte
@var contient le nom de la variable courante
Pagesjsp 108
ditration
<h: dat aTabl e i d=" books"
val ue=" #{BookStore.items}"
var =" store" >

</ h: dat aTabl e>


19
Collections autorises
Doit tre un des types suivant
Un tableau (ex St r i ng[ ] , I nt eger [ ] , )
j ava. ut i l . Li st
Pagesjsp 109
j ava. sql . Resul t Set
j ava. ser vel t . j sp. j st l . sql . Resul t
j avax. f aces. model . Dat aModel
<f : ver bat i m>spcifier du texte
comme contenu dun lment J SF
<h: col umn>
<f : ver bat i m>Mr </ f : ver bat i m>
Pagesjsp 110
<f : ver bat i m>Mr </ f : ver bat i m>
<h: out put Text val ue="#{name.last}"/ >
</ h: col umn>
<f : f acet name=" header" >
Enttes de colonne
<h: col umn>
<f : f acet name=" header">
<h: out put Text val ue="#{msg.nom}"/ >
</ f : f acet >
Pagesjsp 111
<h: commandLi nk i d=" link"
act i on="#{p.go}">
<h: out put Text val ue="#{p.nom}"/ >
</ h: commandLi nk>
</ h: col umn>
Lien dans une ligne de tableau
<h: col umn>
. . .
<h: commandLi nk i d=" link" act i on=" #{p.go}" >
<h: out put Text val ue=" #{p.nom}" / >
</ h: commandLi nk>
</ h: col umn>
Pagesjsp 112
Rcupration par programme de la ligne
utiliser le type Dat aModel
j avax. f aces. model . Dat aModel values;
public St r i ng go( ) {
. . .
Coul eur c = values.getRowData();
. . .
}
Couleur
bleu
blanc
rouge
Initialisation dun Dat aModel
Cration partir dune liste
Li st <Coul eur > l i st e =
new Ar r ayLi st <Coul eur >( ) ;
l i st e. add( new Coul eur ( " bleu" ) ) ;
l i st e. add( new Coul eur ( " blanc" ) ) ;
l i st e. add( new Coul eur ( " rouge" ) ) ;
Pagesjsp 113
Dat aModel val ues = new Dat aModel ( l i st e) ;
public Dat aModel get Val ues( ) {}
Liaison dans la page J SF
<h: dat aTabl e i d= " coul eur s"
val ue=" #{l esCoul eur s. val ues}"
var =" coul eur " >

</ h: dat aTabl e>


Lien direct dans une table
Pagesjsp 114
20
Lien direct dans une table
<h: out put Li nk>
<h: dat aTabl e i d=" spect acl es" var =" spect acl e"
val ue=" #{l esSpect acl es. val uesModel }" >
<h: col umn>
<f : f acet name=" header " >
<h: out put Text val ue=" #{msg. i d}" / >
</ f : f acet >
<h: out put Text val ue=" #{spect acl e. i d}" / >
Pagesjsp 115
</ h: col umn>
<h: col umn>
<f : f acet name=" header " >
<h: out put Text val ue=" #{msg. nom}" / >
</ f : f acet >
<h:outputLink i d=" l i nk" val ue=" dir/#{spectacle.id}.html" >
<h: out put Text val ue=" #{spect acl e. nom}" / >
</ h:outputLink>
</ h: col umn>
</ h: dat aTabl e>
Gestion de collections
Pagesjsp 116
<h: sel ect ManyCheckbox>
<f : sel ect I t em>
Pagesjsp 117
Valeurs St r i ng[ ]
<h: f or mi d=" form" >
<h: messages st yl e=" color:red;" / >
<h: sel ect ManyCheckbox i d=" couleur"
val ue=" #{selection.values}" >
<f : sel ect I t emi t emVal ue=" bleu" i t emLabel =" Bleu" / >
<f : sel ect I t emi t emVal ue=" blanc" i t emLabel =" Blanc" / >
f l i l " " i b l " R " /
<h: sel ect ManyCheckbox>
<f : sel ect I t em>
Valeurs
de retour
<f : sel ect I t emi t emVal ue=" rouge" i t emLabel =" Rouge" / >
</ h: sel ect ManyCheckbox>
<br / >
<h: commandBut t on val ue=" Soumet t r e" i d=" submi t "
act i on=" show" / >
</ h: f or m>
Bean J ava
private St r i ng[ ] val ues;
public voi d set Val ues( St r i ng[ ] val s) {val ues = val s; }
public St r i ng[ ] get Val ues( ) {return val ues; }
Pagesjsp 118
<h: sel ect ManyCheckbox>
<f : sel ect I t ems>
Valeurs St r i ng[ ]
<h: sel ect ManyCheckbox i d=" couleur"
val ue=" #{selection.values}" >
<f : sel ect I t ems val ue=" #{selection.couleurs}" / >
</ h: sel ect ManyCheckbox>
BeanJ ava
Pagesjsp 119
Bean J ava
private Sel ect I t em[ ] coul eur s = {
new Sel ect I t em( " bl eu" , " Bl eu" ) ,
new Sel ect I t em( " bl anc" , " Bl anc" ) ,
new Sel ect I t em( " r ouge" , " Rouge" )
};
public Sel ect I t em[ ] get Coul eur s( ) {return coul eur s; }
public void set Coul eur s( Sel ect I t em[ ] coul eur s) {
this. coul eur s = coul eur s;
}
Composants de linterface
<f : vi ew>
<h: f or mi d=" form" >
<h: messages st yl e=" color:red;" / >
<h: sel ect ManyCheckbox i d=" couleur"
val ue=" #{selection.values}" >
<f : sel ect I t emi t emVal ue=" bleu" i t emLabel =" Bleu" / >
<f : sel ect I t emi t emVal ue=" blanc" i t emLabel =" Blanc" / >
<f l t I t i t V l " " i t L b l " R " / >
Pagesjsp 120
<f : sel ect I t emi t emVal ue=" rouge" i t emLabel =" Rouge" / >
</ h: sel ect ManyCheckbox>
<br / >
<h: commandBut t on val ue=" Soumet t r e" i d=" submi t "
act i on=" show" / >
</ h: f or m>
</ f : vi ew>
f : vi ew
h: f or m
h: message h: sel ect ManyCheckbox h: commandBut t on
21
Parcourir linterface par programme
private UI Sel ect Many many;
private UI Sel ect Many get Many( ) {
if ( many == nul l ) {
UI Vi ewRoot r oot =FacesCont ext .
get Cur r ent I nst ance( ) . get Vi ewRoot ( ) ;
UI For mf or m= ( UI For m) r oot . get Chi l dr en( ) . get ( 0) ;
many = ( UI Sel ect Many) f or m. get Chi l dr en( ) . get ( 1) ;
}
return many;
Pagesjsp 121
y;
}
. . .
St r i ng[ ] sel ect ed = ( St r i ng[ ] ) get Many( ) . get Sel ect edVal ues( ) ;
f or ( i nt i = 0; i < sel ect ed. l engt h; i ++) {
Syst em. out . pr i nt l n( sel ect ed[ i ] ) ;
}
f : vi ew
h: f or m
h: message h: sel ect ManyCheckbox h: commandBut t on
Erreurs
Pagesjsp 122
Valeur requise
Pagesjsp 123
Erreur de conversion
Pagesjsp 124
Validation rcupration derreurs
<f : vi ew>
<h1>
<h: out put Text val ue=" #{msg. ent et e_champNom}" / >
</ h1>
<br/><h:messages style="color: red"/><br/>
<h: f or mi d=" hel l oFor m" >
<h: out put Text val ue=" #{msg. pr ompt }" / >
<h: i nput Text val ue=" #{l aPer sonne. nom}"
Pagesjsp 125
required="true"/ >
<h: commandBut t on act i on=" gr eet i ng"
val ue=" #{msg. t ext eDuBout on}" / >
</ h: f or m>
</ f : vi ew>
<h: messages>
<h: message>
Avertissements collectifs
<h: messages st yl e=" col or : r ed" / >
Avertissements individuels (utilise les identifications)
Pagesjsp 126
Attributs id et for
<h: i nput Text id="password" si ze=" 15"
r equi r ed=" t r ue"
val ue=" #{Logi nSer ver . passwor d}" / >
<h: message st yl e=" col or : r ed"
for="password"/ >
22
Conversion et validation des
donnes saisies
Pagesjsp 127
<f : conver t Number > ( 1)
Valeur montaire
<h: out put Text val ue=" #{conver t . pr i x}" >
<f : conver t Number t ype=" cur r ency" / >
</ h: out put Text >
E i
Pagesjsp 128
En interne f l oat get Pr i x( ) : 1. 23f
Affichage 1, 23
Numrique <f : conver t Number
t ype=" number " / >
En interne i nt get Poi ds( ) : 12
Affichage 12
<f : conver t Number > ( 2)
Pourcentage <f : conver t Number
t ype=" per cent " / >
En interne f l oat get Rat i o( ) : 0. 5f
Affichage 0, 5 %
Entier nombre maximum de chiffres
Pagesjsp 129
<f : conver t Number i nt eger Onl y=" t r ue"
maxI nt eger Di gi t s=" 2" / >
En interne f l oat get Pr i x( ) :
1234. 56f
Affichage 34. 56
<f : conver t Number pat t er n=" #. #" / >
Cycle de vie dune requte J SF
Transmission
des valeurs
Validation
d l
VueJ SF
Requt
e
Saisie des valeurs
Reception des valeurs par le contrleur
+ Convertion des valeurs
Pagesjsp 130
Mise jour
des beans
des valeurs
Traitement
(application)
Rendu dela
rponse
Rponse
Gestion des evts +
Calcul de la navigation
Diffrentes mthodes de validation
Validateurs prdfinis
validateDoubleRange
validateLength
Pagesjsp 131
validateLongRange
Validateurs dfinis par lusager
Implmenter linterface Val i dat or
Validation dans les beans grs
Implmenter des mthodes de validation
Validateurs prdfinis
Longueur dune chane
<h: i nput Text val ue="#{laPersonne.nom}"
r equi r ed="true" >
<f:validateLength mi ni mum=" 2" maxi mum="10" / >
Pagesjsp 132
</ h: i nput Text >
Valeurs numriques bornes
<h: i nput Text val ue="#{laPersonne.age}"
r equi r ed="true" >
<f:validateLongRange mi ni mum=" 18" maxi mum=" 120" / >
</ h: i nput Text >
23
Validateur dfini par lutilisateur
Dans le formulaire
<h: i nput Text val ue="#{laPersonne.nom}"
r equi r ed="true" >
<f : val i dat or val i dat or I d="nameValidator" / >
</ h: i nput Text >
Pagesjsp 133
Dans le fichier de configuration
<val i dat or >
<val i dat or - i d>nameValidator</ val i dat or - i d>
<val i dat or - cl ass>
fr.ifsic.tpJsf.NameValidator</ val i dat or - cl ass>
</ val i dat or >
Implmenter linterface Val i dat or
public class NameVal i dat or implements Val i dat or {
private static final St r i ng NOM_REGEX =
" ([a-z]|[A-Z]){1}(('|\\ |\\-)?([a-z]|[A-Z])+)*" ;
public void val i dat e( FacesCont ext ar g0,
UI Component ar g1, Obj ect val ue)
throws Val i dat or Except i on {
Pat t er n mask = Pat t er n. compi l e( NOM_REGEX) ;
St r i ng nom= ( St r i ng) val ue;
Pagesjsp 134
Mat cher mat cher = mask. mat cher ( nom) ;
if ( ! mat cher . mat ches( ) ) {
FacesMessage message = new FacesMessage( ) ;
message. set Det ai l ( " Name not valid" ) ;
message. set Summar y( " Name not valid" ) ;
message. set Sever i t y(
FacesMessage. SEVERI TY_ERROR) ;
throw new Val i dat or Except i on( message) ;
}
}
}
Validation dans un bean (1)
Au sein du formulaire
<h: i nput Text i d=" email"
val ue="#{UserRegistration.user.email}"
val i dat or =" #{UserRegistration.validateEmail}"
r equi r ed="true" >
St r i ng
Pagesjsp 135
</ h: i nput Text >
Au sein du bean UserRegistration
Programmer unemthode
public void val i dat eEmai l ( FacesCont ext cont ext ,
UI Component t oVal i dat e,
Obj ect val ue)
Validation dans un bean (2)
Au sein du bean
public void val i dat eEmai l ( FacesCont ext cont ext ,
UI Component t oVal i dat e,
Obj ect val ue) {
St r i ng emai l = ( St r i ng) val ue;
if ( emai l i ndexOf ( ' @' ) == - 1) {
Pagesjsp 136
if ( emai l . i ndexOf ( @) 1) {
( ( UI I nput ) t oVal i dat e) . set Val i d( f al se) ;
FacesMessage message =
new FacesMessage( " I nval i d Emai l " ) ;
cont ext . addMessage(
t oVal i dat e. get Cl i ent I d( cont ext ) , message) ;
}
}
Instancier un attribut de bean
Instancier un attribut de bean sur un click de
bouton
<h: commandLi nk act i on=" edi t "
st yl eCl ass=" edi t But t on" >
f t P t A t i Li t
Pagesjsp 137
<f : set Pr oper t yAct i onLi st ener
target=" #{f xCont ent Vi ewBean. cont ent }"
value=" #{f xSyst emBean. cont ent [ r ow[ 0] ] }" / >
Edi t . . .
</ h: commandLi nk>
Mlanger lments J SF et non J SF
Interdit de placer un lment J SF dans un
lment non J SF qui effectue des itrations
<ul >
<c: f or Each i t ems=" ${books}" var =" b" >
Pagesjsp 138
<l i ><h: out put Text val ue=" #{b}" / ></ l i >
</ c: f or Each>
</ ul >
Autoris dans un <c: i f >ou <c: choose>
Mais : les composants J SF internes doivent tre identifis !
Dautres problmes peuvent apparatre
24
Mlange dlments J SF et de texte
Premier cas
<h: out put Text val ue=" Some t ext " / >
Some mor e t ext
Some text
Pagesjsp 139
Second cas
<h: panel Gr oup>
<h: out put Text val ue=" Some t ext " / >
Some mor e t ext
</ h: panel Gr oup>
Some more text
Some more text
Some text
Fragments de pages
Fabriquer une page laide de fragments
agglomrs
modularit, rutilisationdecode
Pagesjsp 140
modularit, rutilisation de code
Chargement dynamique
<j sp: i ncl ude>, <c: i mpor t >
Chargement statique (mthode prfre)
<%@i ncl ude f i l e=" relative url" %>
Chargement dynamique
Page principale
<f : vi ew>
. . .
<j sp: i ncl ude page=" foo.jsp" / >
. . .
</ f : vi ew>
P
La page inclue doit tre
dans un lment
Pagesjsp 141
Page Foo. j sp
<f : subvi ew>
<h: out put Text val ue=" heyah! " / >
. . .
<f : ver bat i m>
<b>Templ at e t ext . </ b>
<cust omt ag: dot hi s/ >
</ f : ver bat i m>
</ f : subvi ew>
<f : subvi ew>
Les lments non JSF
doivent tre inclus dans
des lments
<f : ver bat i m>
Facelets
Pagesjsp 142
Facelets
Structurer un site WEB
Header
Passage de
paramtres
Pagesjsp 143
Content
Footer
Main
template
Une seule
description
de la structure
facelets
Composition (appel de procdure)
<ui : composi t i on
t empl at e=" myTempl at e. j sp" >
Pagesjsp 144
Paramtres effectifs
<ui : def i ne>
Paramtres formels (modle de page)
<ui : i nser t >
25
Modle de page
<di v i d=" header ">
<ui:insert name=" header" >
<ui : i ncl ude sr c=" header . xht ml " / >
</ ui:insert>
/ di
Pagesjsp 145
</ di v>
<di v i d=" l ef t " >
<ui:insert name=" navigation" >
<ui : i ncl ude sr c=" navi gat i on. xht ml " / >
</ ui:insert>
</ di v>
Composition
<ui:composition t empl at e="l ayout . xht ml ">
<ui : def i ne name=" t i t l e" >CD f or m</ ui : def i ne>
<ui : def i ne name=" cont ent " >
<h: f or mi d=" cdFor m" >

Pagesjsp 146
</ h: f or m>
</ ui : def i ne>
</ ui:composition>
Outils
Pagesjsp 147
Des librairies J SF
La dernire version officielle de Sun
http://java.sun.com/j2ee/javaserverfaces
Myfaces dApache
htt // f h /
Pagesjsp 148
http://myfaces.apache.org/
Oracle ADF Faces
http://www.oracle.com/technology/products/jdev/htdocs/p
artners/addins/exchange/jsf/index.html
J Scape WebGalileo Faces
http://www.jscape.com/webgalileofaces/dload.html
Editeurs J SF graphiques
Oracle J Developer 10.1.3
http://www.oracle.com/technology/products/jdev/index.html
Sun J ava Studio Creator's J SF Visual Editor
http://developers.sun.com/prodtech/javatools/jscreator/
IBM Websphere Application Developer's J SF enabled J SP
Visual editor
http://www-
Pagesjsp 149
p
128.ibm.com/developerworks/websphere/techjournal/0401_barcia/bar
cia.html
MyEclise's J SF Visual Editor
http://www.myeclipseide.com/ContentExpress-display-ceid-54.html
J Builder de Borland
http://www.borland.com/us/products/jbuilder/index.html
J avaServer Faces Tooling Project (gratuit, venir)
http://www.eclipse.org/proposals/eclipse-jsf/
Oracle J Developer 10.1.3
Pagesjsp 150
26
Sun J ava Studio Creator's J SF Visual
Editor
Pagesjsp 151
IBM Websphere Application
Developer
Pagesjsp 152
MyEclise
Pagesjsp 153
Inconvnients de J SF
J SF utilise POST uniquement.
Impossibilit de garder la rfrence dune page
Les noms de fichiers sont diffrents des
URL
Pagesjsp 154
URL
Noms fichier se terminent par *.J SP
URL se terminent par *.J SF
Pas de possibilit dutiliser javascript
Validation cot client impossible
Technologies MVC concurrentes
Struts (le plus ancien) tend tre remplac
par les autres J SF est dit plus flexible
http://struts.apache.org/
Pagesjsp 155
http://struts.apache.org/
Spring (le tout dernier) voir
pour la petite histoire, J SF est fortement
inspir des WebForms du framework
Microsoft ASP.NET
Rfrences
Pagesjsp 156
27
Un tableau de rfrence sur les
composants graphiques J SF
bl d f d h l
Pagesjsp 157
Tableau de rfrence des composant J SF html
http://www.exadel.com/tutorial/jsf/jsftags-
guide.htmlrfrence
Quelques Articles
A first look at J avaServer Faces by David Geary
http://www.javaworld.com/javaworld/jw-11-2002/jw-1129-jsf.html
Developing Web Applications with J avaServer Faces by
Qusay H. Mahmoud
htt //d l j /d l /t h i lA ti l /GUI/J S F /
Pagesjsp 158
http://developer.java.sun.com/developer/technicalArticles/GUI/J avaServerFaces/
J avaServer Faces: A standard-based solution for J ava
Web applications by Murali Kaundinya & J amiel Sheikh
http://sys-con.com/java/source.cfm?id=1991
"Putting a New Face on Web Interfaces" by Peter Varhol
http://www.fawcette.com/javapro/2003_04/magazine/columns/weblication/
"Introducing J avaServer Faces" by Budi Kurniawan
http://www.onjava.com/pub/a/onjava/2003/07/30/jsf_intro.html
Autres rfrences
Rappel : Tutorial de sun (1500 pages)
(pdf) http://java.sun.com/j2ee/1.4/docs/tutorial-
update2/doc/J 2EETutorial.pdf
Un tutorial Exadel
http://www.exadel.com/tutorial/jsf/jsftutorial-
kickstart html
Pagesjsp 159
kickstart.html
J ames Holmes J ava Server Faces Links
http://www.jamesholmes.com/J avaServerFaces/
J ava Server Faces central
http://www.jsfcentral.com/
La page officielle J SF chez Sun
http://java.sun.com/j2ee/javaserverfaces/