jsf2

Upload: wael-aniba

Post on 12-Oct-2015

22 views

Category:

Documents


0 download

TRANSCRIPT

  • 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