Pages jsp1 JSF Java Server Faces L’AWT-SWING du WEB Yves Bekkers.

Slides:



Advertisements
Présentations similaires
JEE 5 - JSF F.Pfister 2 institut eerie Les technologies du web Servlets JSP MVC Model 1 : servlets + JSP MVC Model.
Advertisements

Transformation de documents XML
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Design Pattern MVC En PHP5.
Environnement Premier projet.
JSP 2 Crash Course Michel Buffa UNSA
Introduction aux Web Services Partie 1. Technologies HTML-XML
Cours n°3 Les formulaires
JAVA SERVER FACES (JSF)
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
JAVASERVER FACES Un framework Java pour le développement Web.
Normandy JUG Présentation de JSF.
Projet JAVA EE Approfondi
ASP.NET Par: Hugo St-Louis. C ARACTÉRISTIQUES A SP. NET Évolution, successeur plus flexible quASP (Active Server Pages). Pages web dynamiques permettant.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Adaptée du cours de Richard Grin
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
PHP & My SQL.
© 1 Taglibs Applications Struts Taglibs. © 2 Applications Struts Les Tags Libraries Struts Bean : Accès aux JavaBean, aux ressources Html : Gestion des.
Introduction à Visual Studio C++ (VC++)
Tutorat en bio-informatique
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
Struts.
Module : Pages Web Dynamiques (Production Électronique Avancée)
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
Les Servlets Présentation Cycle de vie Principe de fonctionnement
13/07/2015 JSF Java Server Faces Master 2 Pro GLR TER David Mihura Eric Le Merdy.
Les Java Server Pages Dans ce chapitre, nous allons :
JI Les systèmes d’autorisation et d’authentification dans AMI Fabian Lambert.
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
Création d’un site WEB 1 – Un site WEB c’est quoi ? 2 – Questions à se poser avant la construction d’un site WEB 3 – Principes de fonctionnement d’un site.
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
Mediator 9 - Un outil de développement multimédia 3AC Techno/Informatique.
Développement d’application avec base de données Semaine 3 : Modifications avec Entité Framework Automne 2015.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 10 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 5 Support de cours rédigé par Bernard COFFIN Université.
1 Les bases de données Séance 7 Les fonctions avancées : Opérateurs ensemblistes, Sous-requêtes et transactions.
Introduction à la programmation
Développement d’application avec base de données Semaine 8 : WPF avec Entité Framework Automne 2015.
INSTITUT UNIVERSITAIRE DE TECHNOLOGIE -B.P.2235 – Avenue Aristide Briand – Montluçon Cedex Tél – Fax –
Un outil de communication : la liste de diffusion Mis à jour en juillet 2008 Anne Maincent-Bourdalé CRDoc IUT Paul Sabatier.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 1 Support de cours rédigé par Bernard COFFIN Université.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 6 Support de cours rédigé par Bernard COFFIN Université.
FACTORY systemes Module 5 Page 5-1 Les outils clients Wonderware FORMATION InSQL 7.0.
Initiation aux bases de données et à la programmation événementielle Outil de création des tables Support de TD rédigé par Bernard COFFIN Université Paris.
La création des données d’exemplaire pour un exemplarisateur Sudoc.
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
Développement d’application avec base de données Semaine 9 : Code First avec Entité Framework Automne 2015 Tous le matériel provient de :
Du panier à la commande client Créer un panier Identification Validation de la commande Paiement Formulaire de création de compte Etats de la commande.
UML : méthode Processus. Introduction(1) ● Cycles ● Spécification par cas d'utilisation ● Identifier les besoins ● Analyse par cas d'utilisation ● Affiner.
Introduction à la Programmation Orientée Objet H.GATI.
Formation à l’utilisation de K-Sup V5 février 2009 CRISI - COM.
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 7 Support de cours rédigé par Bernard COFFIN Université.
Human Task Service (2008) Oscar Barrios et François Charoy Human Task Service Service de tâches dans un système de gestion de workflow Oscar Barrios
On the analysis of CMMN expressiveness: revisiting workflow patterns Renata Carvalho Hafedh Mili.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
IFT359 – Programmation fonctionnelle Thème #8 Création de nouvelles formes syntaxiques 1.
Cours de Langage C Les structures
Prochaine évolution de nos modèles bibliographiques : FRBR-LRM Pat Riva Présidente, FRBR Consolidation Editorial Group Séminaire.
Introduction Depuis le début des sites web les urls sont utilisé pour la navigation. Avec l’arrivée des bases de données, les urls ont prit de l’importance.
Projet de session Cours SCG Réalisation d’application en SIG Présenté par Nidhal Ben Othmen.
FORMATIONENT/SVT Saint Orens Vendredi 15 novembre 2013.
Cours de Langage C Récursivité. Objectifs de la séance 11 Connaître la récursivité. Mesurer un temps d’exécution. 2.
INSCRIPTIONS SPORTIVES
1 Initiation aux bases de données et à la programmation événementielle Construction d’un état Support de TD rédigé par Bernard COFFIN Université Paris.
Persistance en bases de données O.Legrand G. Seront.
Transcription de la présentation:

Pages jsp1 JSF Java Server Faces L’AWT-SWING du WEB Yves Bekkers

Pages jsp2 Introduction

Pages jsp3 JSF Qu’est-ce que c’est ? Une technologie de développement d’application WEB (framework) qui dispense d’écrire du code Java dans les interfaces Qui offre –Deux librairies de composants graphiques –Mécanismes d’évènements et de validation –Mécanisme de navigation de page en page –Gestion automatique de d’objets en arrière plan Conçue aussi pour faciliter la fabrication d’outils de développements adéquates (plus de 6 outils de développement connus)

Pages jsp4 Deux librairies Librairie HTML (composants graphiques) Librairie Core (validation, gestion des évènements, conversions)

Pages jsp5 Librairie HTML Inputs, Outputs, Commands Selections,, Layouts Data table Errors and messages,

Pages jsp6 Librairie core fenêtre principale fenêtre secondaire au sein d’une fenêtre principale. ajouter une validation à un composant. ajouter un convertisseur à un composant. ajouter un écouteur d’évènement de type action. ajouter un écouteur d’évènement de type changement de valeur.

Pages jsp7 Composants graphiques et rendu Deux niveaux de vues –la vue abstraite ou modèle, la vue concrète (rendu visuel) –Un même composant abstrait peut avoir plusieurs rendus. le composant UISelectOne possède les 3 rendus –Bouton radio –Case à cocher –Élément d’une liste déroulante Le composant UICommand possède 2 rendus –Le lien hypertexte –Le bouton

Pages jsp8 Le composant abstrait UIIinput IUInput possède 4 rendus – Paramètres cachés – Ligne de texte sans espace rendu par des * – Une ligne de texte – Plusieurs lignes de texte

Pages jsp9 Rendus du composants UIIinput

Pages jsp10 Listeners, validateur, convertisseurs On peut nommer les composants graphiques abstraits et leur associer des –Listeners –Validateurs –Convertisseurs –Des objets (java beans) BeansUI abstraitUI concret Conversion validation association synchronisation

Pages jsp11 La page bonjour

Pages jsp12 Second exemple – un formulaire <h:commandButton action= "vert" value="GoToGreenPage" /> <h:commandButton action= "bleu" value="GoToBluePage" />

Pages jsp13 Exemples de tags JSF Conteneur des éléments graphiques : obligatoire dans toute page JSF Formulaire Bouton de formulaire

Pages jsp14 Technologies concurrentes Servlets et pages JSP –Pas de technologie d’interface à base de composants graphiques Struts –Pas de technologie d’interface à base de composants graphiques –Pas de modèle d’évènements –Pas de gestion de l’état de composants graphiques –Struts est lié à HTML pour son rendu Spring –Très récent, à voir …

Pages jsp15 Bibliothèques requises jsf-api.jar –librairies javax.faces.* jsf-imp.jar (ou jsf-ri.jar ) –l’implementation des composants com.sun.faces.* jstl.jar et standard.jar –nécessaires pour utiliser les tags JSTL tags et pour certaines références faites par l’api JavaServer Faces (internationalisation …) commons-beanutils.jar –manipulation des java beans commons-digester.jar –Manipulation des documents XML commons-collections.jar –extensions de Java 2 SDK ( Collections ) commons-logging.jar –des facilités génériques pour créer des fichiers de “log”

Pages jsp16 Fichier web.xml Déclaration de la servlet controleur JSF Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet *.jsf

Pages jsp17 Fichier de configuration Fichier de configuration faces-config.xml –Définir la navigation de paga en page –Définir les instances d’objets d’arrière plan (les backing beans) –Définir des classes de validation de données –Définir des classes d’écoute d’évènements

Pages jsp18 Fonctionnement

Pages jsp19 JSF comment ça marche Chaque page est caractérisée par un arbre de composants graphiques Une servlet contrôleur construit les pages avec leurs composants graphiques (Input type, label, table...) puis la servlet déclenche des évènements relatifs à chacun des composants de la page. Les valeurs affichées ou saisies dans les composants graphiques peuvent être associées à des attributs d’instances d’objets gérés automatiquement en arrière plan de l’application « les backing beans »

Pages jsp20 Cycle de vie d’une requête JSF Réception des valeurs Mise à jour des beans Validation des valeurs Vue JSF Requêt e Traitement (application) Rendu de la réponse Réponse Construction de la vue interne Reception des valeurs par le contrôleur + Convertion des valeurs Gestion des evts + Calcul de la navigation

Pages jsp21 Étapes Constrution de la vue d’entrée : recréer l'arborescence des composants qui composent la page d’origine. Cette arborescence est stockée dans un objet de type FacesContext et sera utilisée tout au long du traitement de la requête. 2 - Réception des valeurs trouvées dans le FaceContext. Durant cette phase des opérations de convertions sont réalisées pour permettre de transformer les valeurs stockées sous forme de chaîne de caractères dans la requête HTTP en un type utilisé pour le stockage des données.

Pages jsp22 Étapes Validation : les données extraites sont validées en appliquant des validateurs enregistrés auprès de chaque composant. Les éventuelles erreurs de conversions sont stockées dans le FaceContext. Dans ce cas d’erreur, l'étape suivante est directement l’étape 6 pour réafficher la même page avec les valeurs saisies et signifier les erreurs 4 - Synchronisation du modèle : Cette étape permet de stocker dans les composants du FaceContext leur valeur locale validée respective. Les éventuelles erreurs de conversions sont stockées dans le FaceContext. Dans ce cas, l'étape suivante est directement l’étape 6

Pages jsp23 Étapes Invoquer l’application : dans cette étape, le ou les événements émis dans la page sont traités. On détermine quelle sera la page résultat qui sera renvoyée dans la réponse en utilisant les règles de navigation définie dans l'application. L'arborescence des composants de cette page résultat est créée. 6 - Rendu de la réponse : cette étape se charge de créer le rendue de la page de la réponse.

Pages jsp24 Identification des 6 phases Possibilité de spécifier des listerners déclanchés aux instants significatifs des phases d’exécution du contrôleur La classe javax.faces.event.PhaseId définit des constantes qui identifient chacune des 6 phases –PhaseId.RESTORE_VIEW, –PhaseId.APPLY_REQUEST_VALUES, –PhaseId.PROCESS_VALIDATIONS, –PhaseId.UPDATE_MODEL_VALUES, –PhaseId.INVOKE_APPLICATION –PhaseId.RENDER_RESPONSE La constante PhaseId.ANY_PHASE permet de demander l'application du listener à toutes les phase (debuggage)

Pages jsp25 Exemple : Ecouteur (traceur) Un écouteur implémente la classe javax.faces.event.PhaseListener import javax.faces.event.PhaseEvent; import javax.faces.event.PhaseId; import javax.faces.event.PhaseListener; public class Ecouteur implements PhaseListener { public void afterPhase(PhaseEvent pe) { System.out.println("Apres " + pe.getPhaseId()); } public void beforePhase(PhaseEvent pe) { System.out.println("Avant " + pe.getPhaseId()); } public PhaseId getPhaseId() { return PhaseId.ANY_PHASE; }

Pages jsp26 Enregistrement d’un PhaseListener Fichier de configuration « server Faces »... lib.PhasesEcouteur …

Pages jsp27 Exemple d’exécution de la classe Ecouteur Avant RESTORE_VIEW 1 Apres RESTORE_VIEW 1 Avant APPLY_REQUEST_VALUES 2 Apres APPLY_REQUEST_VALUES 2 Avant PROCESS_VALIDATIONS 3 Apres PROCESS_VALIDATIONS 3 Avant UPDATE_MODEL_VALUES 4 Apres UPDATE_MODEL_VALUES 4 Avant INVOKE_APPLICATION 5 Apres INVOKE_APPLICATION 5 Avant RENDER_RESPONSE 6 Apres RENDER_RESPONSE 6

Pages jsp28 Toutes les phases ne sont pas toujours exécutées Exemple d’exécution avec une erreur de validation Avant RESTORE_VIEW 1 Apres RESTORE_VIEW 1 Avant APPLY_REQUEST_VALUES 2 Apres APPLY_REQUEST_VALUES 2 Avant PROCESS_VALIDATIONS 3 Apres PROCESS_VALIDATIONS 3 Avant RENDER_RESPONSE 6 Apres RENDER_RESPONSE 6

Pages jsp29 Structure d’une application JSF /WebContent /WEB-INF /classes /lib jsf-impl.jar jsf-api.jar faces-config.xml web.xml /pages inputname.jsp greeting.jsp Pages jsp-html Librairies de tags Classes Java (beans …) Config Servlet Config JFace

Pages jsp30 web.xml : Un contrôleur « faces» Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet /faces/*

Pages jsp31 web.xml + faces-config.xml javax.faces.STATE_SAVING_METHOD server javax.faces.CONFIG_FILES /WEB-INF/faces-config.xml com.sun.faces.config.ConfigureListener...

Pages jsp32 Fichier de configuration JFace Structure du document <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" " facesconfig_1_1.dtd"> …

Pages jsp33 Fichier de configuration JFace Configuration de l’application Remplacement de certaines fabriques ( FacesContextFactory, …) Définition de composants graphiques Définition de convertisseurs Définition d’objets autogérés Définition des règles de navigation Définition d’un kit de rendu Définition de validateurs

Pages jsp34 Enregistrement de la classe Ecouteur Déclaration dans le fichier de configuration « Faces » faces-config.xml... myLib.Ecouteur...

Pages jsp35 Navigation

Pages jsp36 Soumettre un formulaire Lancer une action Gestion par JSF : deux méthodes –Le bouton –Le lien (utilise Javascript …) Next Next Page

Pages jsp37 Navigation dirigée par des chaînes "vert" " bleu" " retour"

Pages jsp38 index.jsp

Pages jsp39 green.jsp

Pages jsp40 blue.jsp

Pages jsp41 faces-config.xml règles de navigation (1) /index.jsp vert /green.jsp bleu /blue.jsp

Pages jsp42 faces-config.xml règles de navigation (2) /green.jsp back /index.jsp /blue.jsp back /index.jsp

Pages jsp43 Navigation rules (2) simplification back /index.jsp

Pages jsp44 Navigation calculée : langage d’expression Expression dans l’attribut action du bouton <h:commandButton value="annuler" action="#{myBean.eval}"/> Fait appel à une méthode d’un bean qui rend un résultat String public String eval() { if (test) return "false" return "true" }

Pages jsp45 JavaBeans Supervisés

Pages jsp46 Deux pages JavaBean Personne nom inputname.jspgreeting.jsp

Pages jsp47 Lier l’interface aux Javabeans inputName.jsp faces-config.xml laPersonne lib.PersonBean PersonBean.java public class PersonBean { private String nom; public String getNom() {… public void setNom(String nom) {…

Pages jsp48 JavaBean public class PersonBean { private String nom; public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; }

Pages jsp49 Déclaration des instances de bean Au sein du fichier faces-config.xml... laPersonne lib.PersonBean request...

Pages jsp50 inputName.jsp : formulaire La valeur saisie dans le composant inputText est transférée automatiquement Dans le Champ nom du Javabean laPersonne

Pages jsp51 greeting.jsp greeting page

Pages jsp52 Configuration JFace (1) Règles de navigation /pages/inputname.jsp greeting /pages/greeting.jsp inputname.jspgreeting.jsp " greeting "

Pages jsp53 Configuration JFace (2) Gestion des JavaBeans laPersonne lib.PersonBean request PersonneBean nom

Pages jsp54 Valeur par défaut d’une propriété de bean laPersonne lib.PersonBean request nom Dupont

Lire en Java des beans Pages jsp55

Lire un bean en java (1) Sans création du bean (peut rendre null) FacesContext context = FacesContext.getCurrentInstance(); ExternalContext ctx=context.getExternalContext(); Map map = ctx.getApplicationMap(); Message mess = (Message)map.get("mess"); Pages jsp56

Lire un bean en java (2) Avec création du bean si nécessaire FacesContext context = FacesContext.getCurrentInstance(); Application app = context.getApplication(); VariableResolver resolver = app.getVariableResolver(); Message mess = (Message)resolver. resolveVariable(context, "mess"); Pages jsp57

Evaluer une expression en Java Avec création du bean si nécessaire FacesContext context = FacesContext.getCurrentInstance(); Application app = context.getApplication(); ValueBinding binding = app.createValueBinding("#{" + expr + "}"); Object value = binding.getValue(context); Pages jsp58

Message de log FacesContext.getCurrentInstance(). getExternalContext().log("un message"); Pages jsp59

Pages jsp60 Modèle MVC Un exemple

Pages jsp61 Calculateur add

Pages jsp62 Modèle public class Calculator { public int add(int a, int b) { return a + b; } public int multiply(int a, int b) { return a * b; } }

Pages jsp63 Controleur

Pages jsp64 Controleur 1 public class CalculatorController { private Calculator calculator = new Calculator(); private int firstNumber = 0; private int secondNumber = 0; private int result = 0; public CalculatorController() { super(); } …

Pages jsp65 Controleur 2 public void setFirstNumber(int aFirstNumber) { this.firstNumber = aFirstNumber; } public int getFirstNumber() { return firstNumber; } public int getResult() { return result; } public void setSecondNumber(int aSecondNumber) { this.secondNumber = aSecondNumber; } public int getSecondNumber() { return secondNumber; }

Pages jsp66 Controleur 3 public String add() { result = calculator.add(firstNumber, secondNumber); return "success"; } public String multiply() { result = calculator.multiply(firstNumber, secondNumber); return "success"; }

Pages jsp67 Bean supervisé CalcBean fr.ifsic.test.CalculatorController session

Pages jsp68 Règle de navigation /calculator.jsp success /result.jsp

Pages jsp69 calculator.jsp

Pages jsp70 calculator.jsp 1 <html xmlns=" xmlns:h=" xmlns:f=" …

Pages jsp71 calculator.jsp 2

Pages jsp72 calculator.jsp 3

Pages jsp73 result.jsp

Pages jsp74 result.jsp 1 First Number: Second Number: Result:

Pages jsp75 Langage d’expression

Pages jsp76 Langage d’expression « EL » ValeurExpression Booléen cart.numberOfItems>0 Élément de tableau books[2] Élément dans une collection books["fiction"] Propriété d’un Java bean laPersonne.nom Propriété d’un objet dans un tableau books[3].prix Propriété initialisée d’un paramètre init du contexte initParam.quantite

Pages jsp77 Liste des objets implicites applicationScope Attributs de l’application ( Map ) cookie Cookies ( Map ) faceContext Instance courante du contexte header HTTP headers ( Map ) headerValues HTTP headers ( Map of String[]) initParam Paramètres d’initialisation de l’appli param Paramètres de la requète ( Map )

Pages jsp78 Liste des objets implicites (2) requestScope Attributs de la requète ( Map ) sessionScope Attributs de la session ( Map ) view La racine de l’arborescence des composants pour cette requète

Pages jsp79 Opérateurs + - * / % div mod opérateurs arithmétique >= == != lt le gt ge eq ne opérateurs de comparaisons && || ! and or not opérateurs logiques Empty un objet null, une chaîne vide, un tableau ou une collection sans élement, …? … : … opérateur ternaire de test

Pages jsp80 Internationalisation Gestion de la langue Gestion des dates/heures ….

Pages jsp81 Que peut-on internationaliser Messages (d’état ou d’erreur) Labels (simples ou sur les composants graphiques) Dates et heures Nombres, valeurs monétaires Numéros de téléphone, adresses Formules de politesse Graphiques, images, couleurs, sons, … Et même la disposition des pages !

Pages jsp82 Internationaliser les chaînes ? En anglaisEn français

Pages jsp83 Messages_fr.properties entete_champNom = JSF sans effort prompt = Donner votre nom : signe = ! texteDeBienvenue = Bienvenue à JSF texteDuBouton = Dire bonjour

Pages jsp84 Messages_en.properties entete_champNom = JSF KickStart prompt = Tell us your name signe = ! texteDeBienvenue = Welcome to JSF, texteDuBouton = Say Hello

Pages jsp85 Page pour entrer votre nom... fomulaire... Lecture des messages Utilisation d’un des messages

Pages jsp86 Fichier de configuration Les langues dans le fichier de configuration... fr en...

Pages jsp87 Recherche d’un fichier de propriétés Lorsque l’utilisateur donne un ordre de préférences (dans son navigateur) –Pour chaque préférence prise dans l’ordre de l’utilisateur java cherche le bon fichier dans l’ordre : 1. Resources_language_country_variant.properties 2. Resources_language_country.properties 3. Resources_language.properties 4. Resources.properties

Pages jsp88 Message paramètré Déclaration dans le fichier de ressources mess = bonjour Mr {0} Utilisation dans un composant JSF

Pages jsp89 Chargement d’un fichier de properties par programme Les fichiers de messages /games/messsages.properties peuvent être captés par progamme comme suit : : FacesContext context = FacesContext.getCurrentInstance(); ResourceBundle msg = ResourceBundle.getBundle("game.messages", context.getViewRoot().getLocale()); String texte = msg.getString("how_to_play");

Pages jsp90 Sortie conditionnelle Attribut rendered

Pages jsp91 Librairie « core » (1) f:view, f:subview Vue principale, sous-vue f:facet Qualifier un élément f:attribute Ajouter un attribut, à un composant f:param Passer un paramètre à un composant f:loadBundle charger un fichier de properties f:verbatim ajouter un texte brut à la vue f:selectItem Un élément dans un composant à choix f:selectItems Groupe d’éléments dans un composant à choix

Pages jsp92 Librairie « core » (2) f:actionListener Ajouter un « listener d’action » à composant f:convertDateTime Conversion date/heure f:convertNumber Conversion numérique f:validator Ajouter un validateur spécifique f:validateDoubleRange Validation « plage de réels » f:validateLength Validation « longueur de valeur » f:validateLongRange Validation « plage d’entiers » f:valueChangeListener Associer un « listener de changement de valeur » à un composant

Pages jsp93 Il doit obligatoirement être défini comme fils d'un composant d'action,. Affecter une valeur à une cible avant l'exécution d'une action donnée Deux attributs –target Le champ cible (à qui la valeur sera affectée) –value La valeur à affecter au champ cible

Pages jsp94 Ajouter des objets aux composants html La plupart des tags de la librarie « core » ajoutent des objets aux composants « html » –Attribute –Listener –Converter –Validator –Facet –Parameter –Select item

Pages jsp95 Librairie html

Pages jsp96 "/>

Pages jsp97 Texte paramètré

Pages jsp98 Regroupements <h:outputText value="grouped with panelGroup"/> one row grouped with panelGroup

Pages jsp99 Affichage conditionnel d’un groupe 10}">

Pages jsp100 <h:inputText value="inputText" style="color: Yellow; background: Teal;"/>

Pages jsp101

Pages jsp102 Navigation JSF

Pages jsp103 Liens html simples <h:outputLink value="#toc“ title="Go to the table of contents"> Table of Contents

Pages jsp104 Tableaux <h:panelGrid columns="4" footerClass="subtitle" headerClass="subtitlebig" styleClass="medium" columnClasses="subtitle,medium"> Classes CSS

Pages jsp105 rendu Table with numbers blabla

Pages jsp106 List, tableau … Subject

Pages jsp107 rendu TitleSubjectPrice ($) JSF For Dummies JSF25.0 Struts For Dummies Struts22.95

Pages jsp108 d’un représente une collection sur la quelle l’itération sur les lignes du tableau contient le nom de la variable courante d’itération <h:dataTable id="books" value="#{BookStore.items}" var="store"> …

Pages jsp109 Collections autorisées Doit être un des types suivant –Un tableau (ex String[], Integer[], …) –java.util.List –java.sql.ResultSet –java.servelt.jsp.jstl.sql.Result –javax.faces.model.DataModel

Pages jsp110 spécifier du texte comme contenu d’un élément JSF Mr

Pages jsp111 Entêtes de colonne <h:commandLink id="link" action="#{p.go}">

Pages jsp112 Lien dans une ligne de tableau... Récupération par programme de la ligne –utiliser le type DataModel javax.faces.model.DataModel values; public String go() {... Couleur c = values.getRowData();... } Couleur bleu blanc rouge

Pages jsp113 Initialisation d’un DataModel Création à partir d’une liste List liste = new ArrayList (); liste.add(new Couleur("bleu")); liste.add(new Couleur("blanc")); liste.add(new Couleur("rouge")); DataModel values = new DataModel(liste); public DataModel getValues() {…} Liaison dans la page JSF <h:dataTable id= "couleurs" value="#{lesCouleurs.values}" var="couleur"> …

Pages jsp114 Lien direct dans une table

Pages jsp115 Lien direct dans une table <h:dataTable id="spectacles" var="spectacle" value="#{lesSpectacles.valuesModel}">

Pages jsp116 Gestion de collections

Pages jsp117

Valeurs String[] <h:selectManyCheckbox id="couleur" value="#{selection.values}"> Bean Java private String[] values; public void setValues(String[] vals) {values = vals;} public String[] getValues() {return values;} Pages jsp118 Valeurs de retour

Pages jsp119 Valeurs String[] <h:selectManyCheckbox id="couleur" value="#{selection.values}"> Bean Java private SelectItem[] couleurs = { new SelectItem("bleu", "Bleu"), new SelectItem("blanc", "Blanc"), new SelectItem("rouge", "Rouge") }; public SelectItem[] getCouleurs() {return couleurs;} public void setCouleurs(SelectItem[] couleurs) { this.couleurs = couleurs; }

Pages jsp120 Composants de l’interface <h:selectManyCheckbox id="couleur" value="#{selection.values}"> f:view h:form h:messageh:selectManyCheckboxh:commandButton

Pages jsp121 Parcourir l’interface par programme private UISelectMany many; private UISelectMany getMany() { if (many == null) { UIViewRoot root =FacesContext. getCurrentInstance().getViewRoot(); UIForm form = (UIForm)root.getChildren().get(0); many = (UISelectMany)form.getChildren().get(1); } return many; }... String[] selected = (String[]) getMany().getSelectedValues(); for (int i = 0; i < selected.length; i++) { System.out.println(selected[i]); } f:view h:form h:messageh:selectManyCheckbox h:commandButton

Pages jsp122 Erreurs

Pages jsp123 Valeur requise

Pages jsp124 Erreur de conversion

Pages jsp125 Validation – récupération d’erreurs <h:inputText value="#{laPersonne.nom}" required="true"/> <h:commandButton action="greeting" value="#{msg.texteDuBouton}" />

Pages jsp126 Avertissements collectifs Avertissements individuels (utilise les identifications) –Attributs id et for <h:message style="color:red" for="password"/>

Pages jsp127 Conversion et validation des données saisies

Pages jsp128 (1) Valeur monétaire En interne float getPrix() : 1.23f Affichage 1,23 € Numérique En interne int getPoids() : 12 Affichage 12

Pages jsp129 (2) Pourcentage En interne float getRatio() : 0.5f Affichage 0,5 % Entier nombre maximum de chiffres En interne float getPrix() : f Affichage 34.56

Pages jsp130 Cycle de vie d’une requête JSF Transmission des valeurs Mise à jour des beans Validation des valeurs Vue JSF Requêt e Traitement (application) Rendu de la réponse Réponse Saisie des valeurs Reception des valeurs par le contrôleur + Convertion des valeurs Gestion des evts + Calcul de la navigation

Pages jsp131 Différentes méthodes de validation Validateurs prédéfinis –validateDoubleRange –validateLength –validateLongRange Validateurs définis par l’usager –Implémenter l’interface Validator Validation dans les beans gérés –Implémenter des méthodes de validation

Pages jsp132 Validateurs prédéfinis Longueur d’une chaîne <h:inputText value="#{laPersonne.nom}" required="true"> Valeurs numériques bornées <h:inputText value="#{laPersonne.age}" required="true">

Pages jsp133 Validateur défini par l’utilisateur Dans le formulaire <h:inputText value="#{laPersonne.nom}" required="true"> Dans le fichier de configuration nameValidator fr.ifsic.tpJsf.NameValidator

Pages jsp134 Implémenter l’interface Validator public class NameValidator implements Validator { private static final String NOM_REGEX = "([a-z]|[A-Z]){1}(('|\\ |\\-)?([a-z]|[A-Z])+)*"; public void validate(FacesContext arg0, UIComponent arg1, Object value) throws ValidatorException { Pattern mask = Pattern.compile(NOM_REGEX); String nom = (String)value; Matcher matcher = mask.matcher(nom); if (!matcher.matches()){ FacesMessage message = new FacesMessage(); message.setDetail("Name not valid"); message.setSummary("Name not valid"); message.setSeverity( FacesMessage.SEVERITY_ERROR); throw new ValidatorException(message); }

Pages jsp135 Validation dans un bean (1) Au sein du formulaire <h:inputText id=" " value="#{UserRegistration.user. }" validator="#{UserRegistration.validate }" required="true"> Au sein du bean UserRegistration –Programmer une méthode public void validate (FacesContext context, UIComponent toValidate, Object value) String

Pages jsp136 Validation dans un bean (2) Au sein du bean public void validate (FacesContext context, UIComponent toValidate, Object value) { String = (String) value; if == -1) { ((UIInput)toValidate).setValid(false); FacesMessage message = new FacesMessage("Invalid "); context.addMessage( toValidate.getClientId(context), message); }

Pages jsp137 Instancier un attribut de bean Instancier un attribut de bean sur un click de bouton <f:setPropertyActionListener target="#{fxContentViewBean.content}" value="#{fxSystemBean.content[row[0]]}"/> Edit...

Pages jsp138 Mélanger éléments JSF et non JSF Interdit de placer un élément JSF dans un élément non JSF qui effectue des itérations Autorisé dans un ou –Mais : les composants JSF internes doivent être identifiés ! –D’autres problèmes peuvent apparaître …

Pages jsp139 Mélange d’éléments JSF et de texte Premier cas Some more text Second cas Some more text Some text Some more text Some text

Pages jsp140 Fragments de pages Fabriquer une page à l’aide de fragments agglomérés – modularité, réutilisation de code Chargement dynamique –, Chargement statique (méthode préférée) –

Pages jsp141 Chargement dynamique Page principale Page Foo.jsp... Template text. La page inclue doit être dans un élément Les éléments non JSF doivent être inclus dans des éléments

Pages jsp142 Facelets

Pages jsp143 Structurer un site WEB Content Header Footer Main template Une seule description de la structure Passage de paramètres

Pages jsp144 facelets Composition (appel de procédure) Paramêtres effectifs Paramêtres formels (modèle de page)

Pages jsp145 Modèle de page

Pages jsp146 Composition CD form …

Pages jsp147 Outils

Pages jsp148 Des librairies JSF … La dernière version officielle de Sun Myfaces d’Apache Oracle ADF Faces artners/addins/exchange/jsf/index.html JScape WebGalileo Faces

Pages jsp149 Editeurs JSF graphiques Oracle JDeveloper – Sun Java Studio Creator's JSF Visual Editor – IBM Websphere Application Developer's JSF enabled JSP Visual editor – 128.ibm.com/developerworks/websphere/techjournal/0401_barcia/bar cia.htmlhttp://www- 128.ibm.com/developerworks/websphere/techjournal/0401_barcia/bar cia.html MyEclise's JSF Visual Editor – JBuilder de Borland – JavaServer Faces Tooling Project (gratuit, à venir) –

Pages jsp150 Oracle JDeveloper

Pages jsp151 Sun Java Studio Creator's JSF Visual Editor

Pages jsp152 IBM Websphere Application Developer

Pages jsp153 MyEclise

Pages jsp154 Inconvénients de JSF JSF utilise POST uniquement. –Impossibilité de garder la référence d’une page Les noms de fichiers sont différents des URL –Noms fichier se terminent par *.JSP –URL se terminent par *.JSF Pas de possibilité d’utiliser javascript –Validation coté client impossible

Pages jsp155 Technologies MVC concurrentes Struts (le plus ancien) tend à être remplacé par les autres – JSF est dit plus flexible – Spring (le tout dernier) à voir … pour la petite histoire, JSF est fortement inspiré des WebForms du framework Microsoft ASP.NET

Pages jsp156 Références

Pages jsp157 Un tableau de référence sur les composants graphiques JSF Tableau de référence des composant JSF html guide.htmlréférencehttp:// guide.html

Pages jsp158 Quelques Articles “A first look at JavaServer Faces” by David Geary “Developing Web Applications with JavaServer Faces” by Qusay H. Mahmoud / / “JavaServer Faces: A standard-based solution for Java Web applications” by Murali Kaundinya & Jamiel Sheikh "Putting a New Face on Web Interfaces" by Peter Varhol "Introducing JavaServer Faces" by Budi Kurniawan

Pages jsp159 Autres références Rappel : Tutorial de sun (1500 pages) –(pdf) update2/doc/J2EETutorial.pdfhttp://java.sun.com/j2ee/1.4/docs/tutorial- update2/doc/J2EETutorial.pdf Un tutorial Exadel – kickstart.htmlhttp:// kickstart.html James Holmes Java Server Faces Links – Java Server Faces central – La page officielle JSF chez Sun –