JSF2
-
Upload
wael-aniba -
Category
Documents
-
view
22 -
download
0
Transcript of JSF2
-
INTRODUCTION
A
JSF2
Presented by Wael ANIBA - UP JEE @ESPRIT - 2013/2014 - [email protected]
JAVA SERVER FACES
-
Plan (1)
Prsentation
Java EE 6
Application Web
Page JSF
Fichiers de configuration
Implmentations de JSF (librairies JSF)
Code dune page JSF
2
-
Plan (2)
Langage EL
Composants standards
Navigation
Beans
Portes (requte, session,)
Templating
Cycle de vie
3
-
Remarque
Ce support est une introduction JSF 2 utilis
dans un cadre Java EE 6, avec un serveur
dapplications du type de Jboss.
4
-
JSF
Prsentation
5
-
Le World Wide Web (WWW) a dmarr comme tant un mcanisme de partage de documents crits en HTML.
Hypertext Transfer Protocol (HTTP) est le protocole utilis pour servir ces documents.
Ctait lpoque du web statique, des pages statiques compos du HTML pure et optionellement avec du contenue media statique (JPG, PNG, etc.)
Introduction JSF 6
-
Aujourdhui, on vie dans un univer dinternet o les pages statiques ne sont plus suffisantes.
Le Web 2.0 introduit une philosophie o les gens peuvent partager toutes sortes d'informations et interagir les uns avec les autres, et le rsultat est des interfaces Web qui sont de plus en plus complexe dvelopper.
Pour crer un contenue dynamique, il faut parser les requtes HTTP, comprendre ce quelles signifient et crer des rponses dans un format appropri pour les navigateurs pour quiils puissent afficher le rsultat (Langages de Script: HTML, XHTML, JS, XML, CSS, etc).
Introduction JSF 7
-
SERVLET & JSP
Les Servlet viennent simplifier ceci en donnant une dimension oriente objet au monde HTTP (HttpRequest, HttpResponse, etc.)
Le modle de Servlet est considr trop bas niveau, Cependant, Les JSP viennent simplifier la cration des pages dynamiques. (Derrire les rideaux une JSP et une Servlet sauf quelle est pratiquement toute crite en HTML MAIS reste avec un peut de java)
Introduction JSF 8
-
Introduction JSF
En rponse certaines limites de JSP, JSF (JavaServer Faces) a t cr avec un nouveau modle l'esprit: la mise composants graphiques pour le Web.
Inspir par le modle de composant Swing, et d'autres frameworks graphiques comme Struts, JSF permet aux dveloppeurs de penser en termes de composants, des vnements, des managed beans, et de leurs interactions, au lieu de grer des requtes et des rponses.
Son objectif est de rendre le dveloppement web plus rapide et plus facile dans une approche RAD.
9
-
Bas sur le design pattern MVC utilis pour dcoupler les vues des donnes et des trairements.
Le modle est reprsent par des classes Java, les Java
beans, gr par le serveur. On le dsigne par Backing Bean
Les vues sont reprsentes par des composants Java sur
le serveur, transformes en pages HTML sur le client
Le contrleur est une servlet unique qui intercepte les requtes HTTP et gre les actions des utilisateurs qui pourraient entraner des changements dans le modle et des mises jour sur les vues. En JSF, ce contrleur est appel FacesServlet. Toutes les requtes passent par le FacesServlet, qui examine la requte et procde aux diverses actions sur le modle en utilisant les Managed Beans.
Services rendus
par JSF (1/3) 10
-
Services rendus
par JSF (2/3)
Conversion des donnes (tout est texte dans linterface utilisateur)
Validation des donnes (par exemple, des champs de formulaires requis)
Automatisation de laffichage des messages derreur en cas de problmes de conversion ou de validation
11
-
Internationalisation localisation
Support dAjax sans programmation (communication en arrire-plan et mise jour partielle de linterface utilisateur)
Fournit des composants standards simples pour linterface utilisateur
Possible dajouter ses propres composants
Adaptable dautres langages de balise que HTML (WML par exemple pour les tlphones portables)
Services rendus
par JSF (2/2) 12
-
Architecture de JSF 13
-
Application Web
Structures des fichiers
Packaging 14
-
Fichier de distribution Lapplication doit tre distribue sous la
forme dun fichier war (fichier de format web archive)
Elle peut tre une partie dun projet de type entreprise, dans ce cas lapplication est encore un .war mais contenu dans le
.ear du projet global (le .ear contient la
partie web dans le .war, la partie EJB
dans un ou plusieurs .jar)
Packaging 15
-
Une page JSF
Code XHTML
Contient des parties en EL : #{}
Utilise souvent une ou plusieurs
bibliothque de composants JSF (html,
core, ui , etc.)
Sera traduite en XHTML pur pour tre
envoye au client Web
Architecture dune application JSF 16
-
Managed bean
Souvent, mais pas obligatoirement, un Managed bean par page JSF
Variables pour les proprits,
Variable pour stocker des rsultats de traitement
Des mthodes get/set pour les proprits,
Des mthodes de traitement (quon appelle command handlers ,
Des couteurs dvnements
Architecture dune application JSF 17
-
EJB
Un Managed bean fournit du code Java pour linterface graphique
Lorsquun processus mtier doit tre dclench, le managed bean cde la main un EJB
Un EJB est totalement indpendant de linterface graphique ; il excute les processus mtier ou soccupe de la persistance des donnes
Architecture dune application JSF 18
-
Fichiers de configuration
WEB-INF/web.xml fichier global de configuration dune application Web Java
WEB-INF/faces-config.xml : configuration de la partie JSF de lapplication, par exemple pour indiquer la navigation entre les pages ou pour dclarer les beans utiliss par les pages ; plus indispensable avec JSF 2.0 grce aux annotations Java
19
-
Annotations et fichier faces-config.xml
JSF 2.0 a dvelopp lemploi des annotations des classes pour configurer son
fonctionnement
Le fichier XML lemporte sur les annotations, ce qui permet de changer la configuration
mme si on na pas le code source (ou dviter de recompiler si on a le code source)
Fichiers de configuration 20
-
Les implmentations de JSF
Implmentation de rfrence de JSF
Librairies de composants
Implmentations 21
-
Implmentation de rfrence
Implmentation de rfrence de SUN et
le Projet Mojarra de Apache
Fournissent les composants de base et
avec des fonctionnalits minimales
De nombreuses librairies fournissent
dautres composants ou enrichissent les fonctionnalits des composants de
limplmentation de rfrence
Implmentations 22
-
Librairies de composants
Lidal serait que toutes les librairies de composants soient compatibles entre elles,
ce qui permettrait de choisir ses composants
dans plusieurs librairies
Dans la ralit ce nest pas toujours le cas et il vaut mieux bien choisir la librairie et sy tenir
Principales librairies : PrimeFaces, RichFaces,
OpenFaces, Icefaces, ADF Faces
Implmentations 23
-
JSF
Code dune page JSF
24
-
Structure globale dune page
Fichier xhtml
tag html qui prcise les namespaces utiliss
En-tte de la page (h:header) qui permet dindiquer les css, les include javascript, etc
Le corps de la page (du XHTML et des tags JSF)
Voir aussi les templates (facelets)
Anatomie dune page JSF 25
-
Langage EL (Expression Language)
Sert relier des proprits ou des mthodes de
beans avec des valeurs de pages JSF
Une expression EL est entoure par #{} Exemple:
lie la valeur du champ de saisie de texte avec
la proprit nom du bean utilisateur
Langage EL 26
-
Librairies de
balises
Plusieurs librairies de balises peuvent tre utilises dans une page JSF (avec Facelets) :
JSF Facelets, de prfixe ui
JSF HTML, de prfixe h
JSF core tag, de prfixe f
JSTL core tag (version 1.1), de prfixe c
JSTL functions tag (version 1.1), de prfixe fn
Eviter JSTL !
Ces prfixes correspondent des espaces de noms XML (URL voir dans la documentation)
27
-
Types de composants 4 grands types :
Ceux qui contiennent une valeur (ValueHolder ou EditableValueHolder) ; un label ou un champ de saisie par exemple
Ceux qui proposent un choix lutilisateur (liste droulante, botes cocher, boutons radio,)
Ceux qui lancent une action (ActionSource2) ; un bouton par exemple
Ceux qui correspondent une structure itrative ; une datatable par exemple
Composants JSF 28
-
Navigation
La Navigation en JSF
29
-
Handler de navigation
La navigation entre les pages indique quelle page est affiche quand lutilisateur clique sur un bouton pour soumettre un formulaire ou quand il clique sur un lien.
Cette navigation est dlgue au handler de navigation
La navigation peut tre dfinie par des rgles dans le fichier de configuration faces-config.xml ou par des valeurs crites dans le code Java ou bien directement sur les pages web.
Navigation 30
-
Navigation statique et
dynamique
La navigation peut tre statique : dfinie
en dur au moment de lcriture de lapplication
La navigation peut aussi tre dynamique
: dfinie au moment de lexcution par ltat de lapplication (en fait par la valeur retourne par une mthode)
Navigation 31
-
Navigation
Navigation implicite et explicite
La navigation peut tre explicite: On spcifie la cl de navigation dans laction du composant responsable de la redirecrtion, ou comme tant valeur de retour dune mthode dfinie dans un backing bean. La regle de navigation est dcrite dans le fichier faces-config.xml
La navigation peut aussi tre implicite : On spcifie le nom de la page cible en dur dans laction du composant responsable de la redirection, sans riendclarer dans le fichier faces-config.xml
32
-
Dans les pages JSF
Dans les pages JSF on indique la valeur ou la mthode associe un bouton qui dterminera la navigation
Avec une valeur :
Ou avec une mthode (qui retourne une valeur):
Ou en indiquant le nom de la page cible:
-
Les Managed Beans
Managed beans les pages JSF sont paules par des managed beans
qui apportent la puissance du langage Java pour coder des interactions sophistiques avec lutilisateur
34
-
Pas de code dans les pages JSF
Pour ceux qui ont travaill avec JSP, il faut
oublier la mauvaise habitude dinclure de la programmation dans les pages JSF
Tout le code (non mtier ) doit
maintenant se trouver dans les backing
beans (le code mtier doit se trouver
dans les EJB ou classes Java lies)
35 Les Managed Beans
-
Les diffrentes portes (scope)
Application
Session
Requte
Conversation
Vue
Personnalise (custom)
36 Les Managed Beans
-
Le templating
en JSF
Uniformiser la structure des pages
Simplifier la mise jour : une modification
dans le template se propage
automatiquement dans toutes les pages qui
l'utilisent.
Gain en productivit : moins de code
crire : une page ne contient que ce qui lui
est propre.
Facelets
37
-
Les zones qui
vont tre
redfinies dans
le client du
template
Les zones
rutilisables
mais toujours
inchanges
38
Le templating
en JSF
-
Header.xhtml fichier inclus dans le template
39
Le templating
en JSF
-
Template Client
40
Le templating
en JSF
-
JSF
Cycle de vie
41
-
Cycle de vie
Pour bien comprendre JSF il est indispensable
de bien comprendre tout le processus qui se
droule entre le remplissage dun formulaire par lutilisateur et la rponse du serveur sous la forme de laffichage dune nouvelle page
42
-
Le servlet
Faces
Toutes les requtes vers des pages JSF sont interceptes par un servlet dfini dans le fichier web.xml de lapplication Web
Faces Servlet
javax.faces.webapp.FacesServlet
1
43
-
Les pages JSF sont traites par le servlet parce que le
fichier web.xml contient une configuration telle que celle-ci :
Faces Servlet
*.jsf
les pages dont lURL se termine par .jsf sont considres comme des pages JSF
Le pattern est souvent aussi de la forme *.faces ou
/faces/* (pattern adopt par la communaut oracle, *.jsf est plutt adopt par la communaut jboss).
URL des pages JSF 44
-
Codage - dcodage
Les pages HTML renvoyes par une application JSF sont reprsentes par un arbre de composants Java.
Lencodage est la gnration dune page HTML partir de larbre des composants
Le dcodage est lutilisation des valeurs renvoyes par un POST HTML pour donner des valeurs aux variables dinstance des composants Java, et le lancement des actions associes aux UICommand JSF (boutons ou liens)
45
-
Cycle de vie
Le codage/dcodage fait partie du cycle
de vie des pages JSF
Le cycle de vie est compos de 6 phases.
Ces phases sont gres par le servlet Faces
qui est activ lorsque quune requte demande
une page JSF (correspond au pattern
indiqu dans le fichier web.xml ; *.jsf)
46
-
47 Cycle de vie
-
Demande page HTML
Etudions tout dabord le cas simple dune requte dun client qui demande laffichage dune page JSF
48
-
La vue
Cette requte HTTP correspond une page
JSF (par exemple *.jsf) et est donc
intercepte par le servlet Faces
La page HTML correspondant la page JSF
doit tre affiche la suite de cette
requte HTTP
La page HTML qui sera affiche est
reprsente sur le serveur par une vue
Cette vue va tre construite sur le serveur et
transforme sur le serveur en une page
HTML qui sera envoye au client
49
-
Contenu de la vue
Cette vue est un arbre dont les lments
sont des composants JSF (composants
Java) qui sont sur le serveur (des instances
de classes qui hritent de UIComponent)
Sa racine est de la classe UIViewRoot qui
est enregistre dans le facesContext.
50
-
Construction vue
et page HTML
Une vue forme des composants JSF est donc
construite sur le serveur (ou restaure si elle avait
dj t affiche) : phase Restore View
Puisquil ny a pas de donnes ou dvnements traiter, la vue est immdiatement rendue : le
code HTML est construit partir des composants
de la vue et envoy au client : phase Render
Response
51
-
Traitement dun formulaire
Nous allons cette fois-ci partir dune requte HTTP gnre partir dune page HTML qui contient un formulaire (page construite partir dune page JSF)
Lutilisateur a saisi des valeurs dans ce formulaire
Ces valeurs sont passes comme des paramtres de la requte HTTP ; par exemple, http://machine/page.xhtml?nom=bibi&prenom=bob si la requte est une requte GET, ou dans lentit dun POST
52
-
Restore View 53
-
Phase de restauration
de la vue
La vue qui correspond la page qui contient le formulaire est restaure (phase Restore View )
Tous les composants reoivent la valeur quils avaient avant les nouvelles saisies de lutilisateur
cette premire phase permet au serveur de recrer l'arborescence des composants qui composent la page. Cette arborescence est stocke dans un objet de type FacesContext et sera utilise tout au long du traitement de la requte.
Restore View 54
-
Apply Request Values 55
-
Phase dapplication des paramtres
les valeurs des donnes sont extraites de la requte HTTP pour chaque composant et sont stockes dans leur composant respectif dans le FaceContext.
Durant cette phase, des oprations de conversions 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 dans le backing bean.
56
Apply Request Values
-
Process Validation 57
-
Phase de validation
une fois les donnes extraites et converties, il est possible de procder leur validation en appliquant les validators enregistrs auprs de chaque composant.
Les ventuelles erreurs de conversions sont stockes dans le FaceContext. Dans ce cas, l'tape suivante est directement Render Response pour permettre de rafficher la page avec les valeurs saisies et afficher les erreurs
Process Validation 58
-
Comment cest fait : chaque composant valide et convertit les donnes quil contient
Si un composant dtecte une valeur non valable, il met sa proprit valid false et il met un message derreur dans la file dattente des messages (ils seront affichs lors de la phase de rendu render response ) et les phases suivantes sont sautes
Phase de validation
Process Validation 59
-
Update Model
Values 60
-
Phase de mise jour du
modle
Si les donnes ont t valides, elles sont
mises dans les variables dinstance des Java beans associs aux composants de
larbre des composants.
61
Update Model
Values
-
Invoke Application 62
-
Phase dinvocation de lapplication
Les actions associes aux boutons ou aux
liens sont excutes
Le plus souvent le lancement des processus
mtier se fait par ces actions
La valeur de retour de ces actions va
dterminer la prochaine page afficher
(navigation)
Invoke Application 63
-
Render Response 64
-
Phase de rendu de
la rponse
La page dtermine par la navigation est
encode en HTML et envoye vers le
client HTTP
Render Response 65
-
Sauter des phases
Il est quelquefois indispensable de sauter des phases du cycle de vie
Par exemple, si lutilisateur clique sur un bouton dannulation, on ne veut pas que la validation des champs de saisie soit effectue, ni que les valeurs actuelles soient mises dans le modle
Autre exemple : si on gnre un fichier PDF
renvoyer lutilisateur et quon lenvoie
lutilisateur directement sur le flot de sortie de la
rponse HTTP, on ne veut pas que la phase de rendu habituelle soit excute
immediate=true 66
-
Cet attribut peut tre ajout un bouton ou un lien (, , et ) pour faire passer directement (immdiatement) de la phase Apply request values la phase Invoke Application (en sautant donc les phases de validation et de mise jour du modle)
Exemple : un bouton dannulation dun formulaire
immediate=true sur un UICommand
immediate=true 67
-
immediate=true sur un EditableValueHolder
Cet attribut peut tre ajout un champ de saisie, une liste droulante ou des bote cocher pour dclencher immdiatement la validation et la conversion de la valeur quil contient, avant la validation et la conversion des autres composants de la page
Utile pour effectuer des modifications sur linterface utilisateur sans valider toutes les valeurs du formulaire
Cycle de vie 68
-
Exemple
Formulaire qui contient champ de saisie du code postal et un champ de saisie de la ville
Lorsque le code postal est saisi, un ValueChangeListener met automatiquement jour la ville :
La soumission du formulaire dclenche par la modification du code postal ne doit pas lancer la validation de tous les composants du formulaire qui ne sont peut-tre pas encore saisis
immediate=true 69
-
INTRODUCTION
A
JSF2
Presented by Wael ANIBA - UP JEE @ESPRIT - 2013/2014 - [email protected]
JAVA SERVER FACES