Java Server Faces (JSF) Avec Eclipse

164

Transcript of Java Server Faces (JSF) Avec Eclipse

  • Ce livre sur JSF traite de la mise en uvre de la technologie Java Server Faces avec lenvironnement de dveloppement Eclipse. Les aspects thoriques, tays par de nombreux exemples, montrent comment lusage de composants JSF permet de faciliter la conception et la maintenance des applications web, tout en offrant aux utilisateurs des services plus adapts leurs attentes. Le livre sadresse tout particulirement des lecteurs matrisant le langage de programmation Java et familiariss par ailleurs avec le dveloppement dapplications web bases sur la technologie JSP. Les principaux points dvelopps dans ce livre couvrent la validation et la conversion des donnes, la gestion vnementielle, la conception de composants JSF personnaliss, ainsi que linternationalisation des applications. Aprs un rappel des notions essentielles lies la conception dapplications web en environnement J2EE, louvrage prsente dans le dtail le langage dvaluation dexpressions propre la technologie JSF, ainsi que les bibliothques de composants utilises. Les chapitres suivants montrent comment exploiter efficacement les composants en question, tout en sattardant sur les mthodes utilisables pour dfinir les rgles de navigation des applications web.

    Ce livre numrique a t conu et est diffus dans le respect des droits dauteur. Toutes les marques cites ont t dposes par leur diteur respectif. La loi du 11 Mars 1957 nautorisant aux termes des alinas 2 et 3 de larticle 41, dune part, que les copies ou reproductions strictement rserves lusage priv du copiste et non destines une utilisation collective, et, dautre part, que les analyses et les courtes citations dans un but dexemple et dillustration, toute reprsentation ou reproduction intgrale, ou partielle, faite sans le consentement de lauteur ou de ses ayants droit ou ayant cause, est illicite (alina 1er de larticle 40). Cette reprsentation ou reproduction, par quelque procd que ce soit, constituerait donc une contrefaon sanctionne par les articles 425 et suivants du Code Pnal. Copyright Editions ENI

    JavaServerFaces(JSF)avecEclipseConception d'applications web

    FranoisXavierSENNESAL

    Rsum

    L'auteur Franois-Xavier Sennesal est responsable informatique au sein d'un organisme de recherche publique. Il assure par ailleurs des enseignements dans le domaine des nouvelles technologies l'cole Suprieure d'Ingnieurs Lonard de Vinci Paris, ainsi qu' l'universit de Versailles St Quentin. travers ce livre, le lecteur profite d'une riche exprience professionnelle axe sur le dveloppement d'applications web avec JSF et Eclipse.

    - 1 - ENI Editions - All rigths reserved

  • Introduction

    Cechapitre tient lieude rappelconcernant lesnotionsessentiellesmisesenuvredans lecadrede laconceptiondapplicationsweb base sur la technologie Java. Il prsente de faon sommaire les notions dapplicationweb,deservlets et de pages JSP. Il traite galement de linstallation de lenvironnement de dveloppement Eclipse pourpermettrelacrationdapplicationswebJ2EE.

    - 1 - ENI Editions - All rigths reserved

  • Rappelssurlanotiondapplicationweb

    1.lmentsconstitutifsduneapplication

    Uneapplicationwebestcomposedundescripteurdedploiement,etdunensemblederessources.Cesressourcespeuventtredetypesvaris:lespluscaractristiquessontlespagesweb(statiquesoudynamiques),lesclassescorrespondantdesservlets,etlesclassespersonnalises.

    Ledescripteurdedploiementestunfichierconventionnellementnommweb.xml.Ilregroupediversesinformationsconcernantlapplication,commeladclarationdesservlets,ladfinitiondesparamtresinitiauxouladclarationdelisteners.

    2.Vieduneapplication

    LefonctionnementduneapplicationwebbasesurlatechnologieJ2EErequiertlutilisationdunmoteurdeservletstenudelaprendreencharge.LemoteurdeservletslepluspopulaireestApacheTomcat.

    LorsquunepageJSPdelapplicationwebestappelepour lapremirefoisparun internaute,celleciestdansunpremiertempstraduiteenservletparlemoteurdeservlets.Unetentativedecompilationdecetteservletestensuiteassure.Silacompilationrussit,laservletestexcute:celaaleplussouventpoureffetderestitueruncontenudanslenavigateurdelinternaute.Silacompilationdelaservletaboutitunchec,unmessagederreurestgnrparlemoteurdeservlets,puisrestitulinternaute.Ceprocessusdetraduction/compilationestparailleursralischaquefoisquunemodificationestapportedanslecodesourcedelapageJSP.

    - 1 - ENI Editions - All rigths reserved

  • Lesservlets

    1.Prsentation

    Une servlet est une classe implmentant linterface javax.servlet.Servlet. Elle fonctionne par lintermdiaire dumoteurdeservlets,enrceptionnantlesrequtesmisesparlesclientsweb,etenyrpondant.

    Il existe actuellement deux classes standards implmentant Servlet : il sagit de classes abstraites nommesGenericServlet etHttpServlet. La premire caractrise une servlet indpendante de tout protocole, alors que lasecondeestspcifiqueauprotocoleHTTP.Enfin,linterfaceServletestgalementimplmenteenstandardparuneclasse non abstraite nomme FacesServlet : celleci gre le cycle de vie des applications web exploitant descomposantsJavaServerFaces.

    2.Cycledevie

    Uneservletassure le traitementdesrequtesmisespar lesclientspar lintermdiairededeuxobjets, issusdesclassesServletRequestetServletResponse.Cesobjetssontfournisenparamtredunemthodeabstraitenommeservice,quilconvientdimplmenterpourpermettrelapriseenchargedesrequtesclientes.

    Outre cettemthodeservice, dont linvocation est assure chaque fois quune requte cliente est mise, uneservletimplmentedeuxmthodesentrantspcifiquementenjeudanssoncycledevie.Ilsagitdesmthodesinitetdestroy.Lapremireestappeleparlemoteurdeservletsjusteaprslacrationdelaservlet,etuniquementcemoment.Lasecondedecesdeuxmthodesestinvoquejusteavantladestructiondelaservlet,etuniquementdanscecas.

    Lexemple suivant illustre la conception dune servlet base sur la classe GenericServlet. Sa mthode serviceexploitelobjetdetypeServletResponsepourretournerunechanedecaractresverslefluxdesortie.

    package perso; import java.io.IOException;

    import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;

    public class MaGenericServlet extends GenericServlet {

    @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { arg1.getWriter().println("Bienvenue");

    } }

    3.CasparticulierdesservletsrpondantspcifiquementauprotocoleHTTP

    Lemeilleurmoyendeconcevoiruneservletcapabledeprendreencharge lesrequtesHTTPconsistecreruneclassedrivedeHttpServlet.

    Cetteclasseralise,autraversdesamthodeinit,untraitementrpartissant lesrequtescomptetenude leurnature.Ainsi,unerequteGETpourratrepriseenchargeautraversde lamthodedoGet,alorsquune requtePOSTleseragrcelamthodedoPost.

    Ilconvientalorsdesurchargerlunedecesdeuxmthodes,comptetenudelanaturedelarequteralise,pourtirerconvenablementprofitdesinformationsfourniesparleclient.Cesmthodesacceptentenargumentunobjetdetype HttpServletRequest contenant toutes les caractristiques de la requte initiale, ainsi quun objet de typeHttpServletResponse utilisable pour renvoyer une rponse au client. Lobjet de typeHttpServletRequest peut enparticuliertreexploitpourprendreconnaissancedesinformationspassesdanslachanerequteaumomentdelasoumissiondunformulairedesaisie,grceluneoulautredesmthodesgetParameter,getParameterNames,etgetParameterValues.

    - 1 - ENI Editions - All rigths reserved

  • LatechnologieJavaServerPages(JSP)

    1.Unebrvedescriptiondumodedefonctionnement

    La technologie JSPest conuepour faciliter lagnrationdepageswebdynamiques sappuyant sur Java.Elleestdirectementassocielanotiondeservlets,etpermetdobtenirunesparationentrelalogiquemtieretlacouchedeprsentation,principalementparlusagedesJavaBeans.

    LorsquunepageJSPsituedansuneapplicationwebparticulireestdemandeparunclientweb,leconteneurquilagre(moteurdeservlets)captureetanalyselarequte.Silapageenquestionnajamaistappele,ousisoncodesourceatmodifi,leconteneurlatraduitsouslaformeduneservlet.Cetteservletestalorscompilepuisexcutepourfournirunerponselarequteduclientweb.Parcontre,silapageadjtutiliseetsisoncodesourcenapastmodifi, laservletqui lui correspondexistedj : il suffitalorsauconteneurdexcutercetteservletpourrpondreauclient.

    2.LescomposantsdunepageJSP

    LecodesourceleplussimpledunepageJSPpeutcorrespondreceluici:

    ...

    ...

    Dune manire gnrale, une page JSP se compose dlments statiques, caractriss par des balises HTML, etdlmentsdynamiques.Cesdernierspeuventtreclasssenquatrecatgories:lesdirectives,lesactions,lesobjetsimplicites,etleszonesdescripting.

    a.Lesdirectives

    CeslmentsfournissentdesinformationsglobalesconcernantlapageJSP.Laformegnraledelasyntaxeutilisepourdfinirunedirectiveestlasuivante:

    - 1 - ENI Editions - All rigths reserved

  • Unedirectiveestdonccaractriseparunouplusieursattributs.LillustrationlapluscourammentrpandueconsistementionnerlelangageutiliserpourlacompilationdelapageJSP.

    IlconvientdeprciserquunepageJSPparticulirepeutcomporterplusieursdirectives.

    Les spcifications JSP proposent trois types de directives, nommes page, include et taglib. Chaque type dedirectivedisposedunjeudattributsspcifiques,dontvoiciunbrefrcapitulatif:

    l language:langageutilispourlacompilationdelaJSP.Actuellement,uniquementJava.

    l import:ensembledespaquetagesJavamettredispositiondelapageJSP.

    l session:indiquesilesdonnesdesessionsontdisponiblespourlapage(valeurpardfaut:true).

    l error_page:URLdelaJSPprenantenchargelesexceptionsrencontres.

    l extends:classeparentedontdriveralaservletgnre.

    l isErrorPage:indiquesilapagecouranteestuneerrorPage.Default=false.

    LinstructionsuivanteillustrelimportationdepaquetagesauseindunepageJSP:

    Ladirectiveincludenepossdequununiqueattributdnommfile.CeluiciindiquelenomdundocumentHTMLoudunepageJSPinclureautomatiquementdanslapagecourante.

    l uri:identifiedemanireuniqueledescripteurdunebibliothquedebalisespersonnalisesutiliserdanslapageJSP.

    l prefix:chaneutilisepourdistinguerdesinstancesdebalisespersonnalises.

    Ladirectivetaglib permetdoncdtendre le jeudebalisesJSPstandardpar lemploidebibliothquesdebalisespersonnalises.

    b.Lesactions

    Les actions standards constituent un moyen technique destin encapsuler les tches ralises les pluscouramment.EllesseprsententsouslaformedebalisesincorporesdanslespagesJSP.Aucoursdelacompilationdelaservlet,leconteneurrencontrecesbalisesetlesremplaceparlecodeJavacorrespondant.

    Voicilesdiffrentstypesdactionsstandards:

    Principauxattributsdeladirectivepage

    Attributdeladirectiveinclude

    Principauxattributsdeladirectivetaglib

    Laction

    - 2 - ENI Editions - All rigths reserved

  • ElleestutilisepourinstancierunJavaBean,ouenlocaliseruneinstanceexistante.Cettemthodeesttrsefficacepoursparerlaprsentationwebdelalogiquemtier,dontlecodeJavaestencapsuldansunJavaBean.

    LesattributsdecetteactionpermettentdefairecorrespondreunnomdevariableauJavaBean,etdeluiaffecteruneduredeviegrcelanotiondeporte(page,session,application).Suivantlaportechoisie,leJavaBeanpeutounontreaccessiblepartirdautrespagesJSP.

    Cette action est utilise conjointement . Elle permet de dfinir les valeurs des proprits dunJavaBean.

    Ladfinitiondespropritsdunbeanpeuttreassuredeplusieursmanires:

    l laidedesparamtresderequtes.Touteslespropritsdubeansontspcifiesgrceauxinformationsfournies:

    http://www.monserveur.fr/maPage.jsp?nom=dupond&prenom=paul

    l Grcelutilisationexplicitedunnomdeproprit:

    Cetteactionestgalementutiliseconjointement.EllepermetdaccderauxvaleursdespropritsdunJavaBean.

    Lexemplesuivantillustrelutilisationconjointedesactions,etdansunepageJSP:

    Exemple dutilisation dun JavaBean dans une JSP La valeur du nom est :

    Ellepermetlaredirectiondelarequte,aumomentdelexcution,versuneressourcestatique,uneservlet,ouuneautreJSP.Sonusageinterromptlexcutiondelapagecourante.Cetteactionpeutellemmecontenirdesactions.

    {}

    Cetteactionfournitunmcanismepourincluredanslapagedesressourcesstatiquesoudynamiquesexternes(parexemple, autres pages JSP ou HTML). Elle peut ellemme contenir des actions , constituant lesparamtrespasserlaressourceinclure.

    {}

    Laction

    Laction

    Laction

    Laction

    Laction

    - 3 - ENI Editions - All rigths reserved

  • EllepermetlagnrationdedocumentsHTMLcontenantdespluginsquiserontexcutsparexemplesouslaformedappletsJava,ousouslaformeduncomposantJavaBean.Aumomentdelexcutiondelapage,cetteactionestremplacesoitparunebalise,soitparunebalise,suivantlanaturedunavigateurclient.Lactionpeutellemmecontenirdesactions.

    {}

    Cetteactionestutiliseuniquementconjointement,ou:ellepermetdecrerdespairesnom/valeur,quitiennentlieudeparamtrespasssauxactionsdanslesquellesellessontplaces.

    c.Lesobjetsimplicites

    LesobjetsimplicitessontdesobjetsaccessiblesdanstoutepageJSP,sansquilsoitncessairedelesinstancieraupralable.LesspcificationsJSPprcisentque tous les langagesdescriptspouvantservircrerdespagesJSPdoiventpermettredutilisercesobjets.

    Ces objets implicites sont bien sr instancis partir de classes ou interfaces disponibles dans le JDK (JavaDevelopmentKit)oudansleJSDK(JavaServletDevelopmentKit)Packagejavax.servlet.

    Voiciunrcapitulatifdesprincipauxobjetsimplicites:

    application

    Reprsente le contexte dexcution des servlets. Il sagit dun objet de type javax.servlet.ServletContextdisposantdelaportesession.

    out

    CorrespondauJspWriterrattachaufluxdesortie.Ildisposedelaportepage.

    page

    Correspondlobjet"this"reprsentantlapageencours.Ildisposedelaportepage.

    pageContext

    Reprsentelecontextedelapageencours.Saporteestpage.

    request

    Reprsente la requte soumise au moteur de servlet par le client (navigateur). Cet objet est issu dejavax.servlet.ServletRequest.Saporteestrequest.

    response

    Reprsente la rponse retourne par lemoteur de servlet au client. Il sagit dun objet implmentant linterfacejavax.servlet.http.HttpServletResponse,dontlaporteestpage.

    session

    Reprsente la sessionpropre au client.De typejavax.servlet.http.HttpSession, cetobjetdisposede laportesession.

    d.LesscriptingJSP

    Laction

    - 4 - ENI Editions - All rigths reserved

  • Les scripting JSP constituent un mcanisme permettant dinclure du code Java dans des pages JSP. Ils sontcompossdetroistypesdlments:lesdclarations,lesexpressions,etlesscriptlets.

    Les dclarations sont utilises pour dclarer des variables et desmthodes au sein dune page JSP. Elles sontinitialises lorsde linitialisationde lapageJSP.Dsquecetteoprationest ralise,ellessontdisponiblespourtouteslesautresdclarationsetexpressions,ainsiquepourlesscriptlets.

    Lesexpressionspermettentdvaluerlersultatduneinstructionsouslaformedunechanedecaractres,etdelinscrireimmdiatementsurlefluxdesortie.Lorsquelersultatdelinstructionnepeutpastreconvertienchanedecaractres,uneexceptionestleve.

    ...

    Bonjour Monsieur

    Lesscriptletsserventregroupertousleslmentsdescriptsentrelesbalises.Ilspeuventcontenirtouteinstructiondecodecompatibleaveclelangagementionndanslattributlanguagedeladirectivepage.

    Lesdclarations

    Lesexpressions

    Lesscriptlets

    - 5 - ENI Editions - All rigths reserved

  • Installation de lenvironnement Eclipse et configuration duneapplicationweb

    CettesectionprsentelestapesncessaireslinstallationdelenvironnementdedveloppementEclipseenvuedeconcevoir des applications web bases sur J2EE et exploitant des composants JSF. Les informations suivantessupposentquunmoteurdeservletsestdjinstalletcorrectementconfigur.

    Linstallationdelenvironnementsefaitendeuxtapes:

    1.ChoixduneimplmentationJSF

    IlexistediffrentesimplmentationspermettantdexploiterlatechnologieJavaServerFaces,notammentMyFacesetSunJSF1.2RI.Lesexemplesetillustrationsprsentsdanscetouvrageonttralisspartirdecettedernireimplmentation, laquelle ont t joints quelques autres composants destins faciliter la conception desapplicationsweb.Au final, les fichiers suivants ont t utiliss pour implmenter JSF dans le cadre des exemplesprsentsdanscetouvrage:

    common-annotations.jar commons-beanutils.jar commons-collections.jar commons-digester.jar commons-logging.jar jsf-api.jar jsf-impl.jar jstl.jar standard.jar

    CesfichierspeuventtreobtenussurlesitedesditionsENI:www.editionseni.fr

    2.InstallationetconfigurationdeEclipseetdelaWebToolPlatform

    PourinstallerlIDEEclipse,ilsuffitdetlchargerlunedesversionsdeceproduitprenantenchargeJ2EE.Laversionutilise dans le cadre de cet ouvrage est Eclipse Europa (Eclipse v3.3.2) disponible ladressehttp://www.eclipse.org/downloads/packages/release/europa/winter

    Unefoisleproduitinstalletactiv,ilestpossibledecrerunpremierprojetexploitantlatechnologieJSFensuivantlestapessuivantes:

    n DclarerlimplmentationJSF,voqueprcdemment,partirdumenuWindowPreferences.EndployantlenudWeb and Xml de larborescence, on accde successivement aux nuds Java Server Faces Tools, puisLibraries.IlestalorspossiblededfinirlabibliothquedarchivesJarmettantenuvrelescomposantsJSF.Lenomdecettebibliothquepeuttrechoisilibrement.Parcontre,ilestindispensabledecocherlacaseintituleIsJSFImplementation.

    - 1 - ENI Editions - All rigths reserved

  • n LacrationdunprojetwebdynamiquesefaitensuiteparutilisationdumenuFileNewProject.LafentrequiapparatpermetdeslectionnerlechoixDynamicWebProjectproposdanslarborescencedunudWeb.Ilfautalorsmentionnerunnomdeprojet,prciserlenometlalocalisationdumoteurdeservletsdanslazoneTargetRuntime,etslectionnerlaconfigurationJavaServerFacesv1.2ProjectdepuislazoneConfigurations.

    - 2 - ENI Editions - All rigths reserved

  • Ilestensuitepossibledacceptertouteslesoptionsproposesdanslesdeuxcranssuivants(visiblesencliquantsuccessivement deux fois sur le boutonNext). Lorsque la rubrique doptions dnomme JSF Capabilities estaffiche,ilestindispensabledeprciserlimplmentationJSFutiliserdanslecadredecenouveauprojet:celasefaitgrceauxboutonsradioJSFLibraries.Attention,ilestimpratifdecocherlacaseDeployavantdecliquersurleboutonFinish.

    - 3 - ENI Editions - All rigths reserved

  • n Une fois cesoprations ralises, lenouveauprojetwebdynamiqueest convenablementconfigur. Il estdoncpossibledeluiadjoindrediffrentesressources,tellesquedesclasses,despagesJSPouHTML.

    - 4 - ENI Editions - All rigths reserved

  • LatechnologieJavaServerFaces

    Aveclmergenceduweb2.0etlaccroissementdelapuissancedesordinateurs,denouveauxbesoinssontapparusvisvisdesapplicationsweb : lesutilisateurs souhaitentdsormaisune interactionplus forteentre le clientquilsexploitent (navigateur, le plus souvent) et le serveur web. limage de la ractivit dont ils bnficient lors delutilisationdelogicielsnonorientsweb,lesinternautesattendentmaintenantdunsitewebquilragissequasimentinstantanment aux actions ralises dans linterface. Quant aux dveloppeurs dapplications web, ils veulentaujourdhuipouvoirconcevoirrapidementdenouveauxoutils,enexploitantleconceptdecomposants.

    DetellesexigencesnepeuventpastrouverderponseadapteautraversdelaseuletechnologieJavaServerPages,nimmede lusagedes servlets : sans connaissances techniques particulirement pousses, ces deuxmoyensnepermettentpasundveloppementrapidedapplicationswebrichesenfonctionnalits.Ilssontgalementdpourvusde dispositifs simples utiliser en vue de la cration de composants graphiques labors, ventuellementpersonnalisables.Lacrationdetelscomposantsrequiert,lencore,beaucoupdetempsetdexpertise.

    Conscientdecesmanques,SunMicrosystemsproposelatechnologieJSF(JavaServerFaces)dontlebutprincipalestdefournir aux concepteurs dapplications web Java un framework de composants spcifiques. JSF permet la crationdapplicationssexcutantctserveur.Lesinterfacesgraphiquesrestituesauxclientssappuientsurunmodledecomposantsparticulirementlabor,permettantlagestiondesvnementsetunerestitutionvariabledelapparencedescomposantsgraphiquessuivantlecontexte.

    LecurdelatechnologieJSFreposeprincipalementsurleslmentssuivants:

    l Unlangagedexpressionsunififacilitantletravaildudesignerweb.Celuicipermetdaccderrapidementenlecture comme en criture aux proprits des composants. Les mthodes de ces composants peuventgalementtreinvoqueslaidedulangagedexpressions.

    l Deuxbibliothquesdebalises spcifiques, tendant le jeudebalises standards JSP.Cellesci sont conuespourfaciliterlintgrationdescomposantsgraphiquesdanslespagesJSP,ainsiquepourpermettreleurliaisonaveclescomposantsctserveur.

    l Une API spcifique permettant de disposer dune reprsentation des composants graphiques ct serveur,dassurer la gestion des vnements et la validation des donnes saisies. Cette API offre galement unsupportpourlinternationalisationdesapplicationsweb.

    - 1 - ENI Editions - All rigths reserved

  • Principedulangagedvaluationdexpressions

    LesspcificationsJSP2.0delatechnologieJavaServerPagesproposentunlangagedvaluationdexpressions.Sonprincipalintrtestdefaciliterletravaildesdesignerswebenleurpermettantdaccdersimplementetrapidement,maisenlectureseulement,auxpropritsdecomposantsJavaBeansdepuisunepageJSP.Cetartificetechnologiquealongtemps suffi pour rpondre au fonctionnement des applications web, dans la mesure o cellesci ne faisaientintervenirquedeschangessimplesentreclientetserveur.

    Grce une volution des spcifications JSP et lintroduction dun langage dexpressions spcifique JSF, il estaujourdhui possible de dvelopper une application web Java dont linterface prend instantanment en charge lesvnementsgnrsparlesactionsdelinternaute.AlorsquuneapplicationJSPstandardnesupportequununiquecycledeviedetyperequte/rponse,uneapplicationJSFsappuiesuruncycledeviephasesmultiplespermettantlagestionvnementielle,laliaisondecomposantsvisuelsavecdesJavaBeans,ainsiquelamiseenplacedeprocessusautomatiquesdeconversionetdevalidationdesdonnessaisies.

    Lexploitationdecesfonctionnalitsestparticulirementfacilitepar lusagedulangagedexpressionspropreJSF,unifiaulangagedexpressionsinitialementconupourJSP.LolelangagenepermettaitauparavantquelaccsenlectureseuledespropritsdeJavaBeans, ilestmaintenantpossibledaccderen lecturecommeencriturecesproprits.Enoutre,celangageunifipermetdinvoquerlesmthodesdeJavaBeansetdvaluerlesexpressionseninstantancommeendiffr.

    - 1 - ENI Editions - All rigths reserved

  • LecycledeviephasesmultiplesdunepageJSF

    Aprs une prsentation rapide de la notion de cycle de vie phasesmultiples dune page JSF, cette partie dcritchacunedesphasesenquestion.Elleapportedesinformationspurementthoriques,quiintresserontnaturellementlelecteursouhaitantcomprendreavecprcisioncommentuneapplicationJSFassurelapriseenchargedelagestiondesvnements ainsi que la conversionet la validationdesdonnes.Mais lacquisition de ces apports thoriques nestcependantpasindispensablelaralisationdeprojetsbasssurJSF.

    1.Principe

    Globalement,ilestpossibledeconsidrerlecycledeviedunepageJSFcommesemblableceluidunepageJSP:unclientwebmetunerequteHTTPverslapageenquestion,puisleserveurquilhbergerpondenrenvoyantunepagetraduiteenHTML.Maisenralit,lecycledeviedunepageJSFestpartitionnenplusieursphases,danslebutde pouvoir rpondre efficacement aux attentes lies cette technologie : capture dvnements au niveau descomposants graphiques, validation ou conversion de composants, liaison entre composants dinterface et objetssexcutantctserveur.

    Deuxtypesderequtesdoiventtredistingus:

    l larequteinitialeaucoursdelaquellelinternauteaccdepourlapremirefoislapageJSF,

    l larequteditepostbackcorrespondantleplussouventlavalidationdunformulaireprcdemmentchargdanslenavigateurduclient.

    Lorsquelapplicationwebtraiteunerequteinitiale,seuleslesphasesderestitutiondelavueetdetraductiondelarponse sont excutes. Le traitement dune requte postback requiert quant lui le passage par chacune desphases du cycle de vie de la page JSF, sauf en cas derreur, dans le but de raliser toutes les conversions etvalidationsncessaires.Lapageestensuiterestitueauclient.

    2.Prsentationdesdiffrentesphases

    a.PhaseRestitutiondelavue(Restoreview)

    Dsquun internaute tente datteindre une page JSF, la phase de restitution de vue est excute. Son but estdassocierunevuelapagevisite.Lapplicationwebcreunevueviergedanslecasdunerequteinitialeellerestitue la vue prcdemment associe la page dans le cas dune requte postback. Tous les gestionnairesdvnementsainsiquelesvalidateursrequisparlescomposantsgraphiquesdelapagesontlislavue.Unarbredecomposantsestconstitu.LavueestensuitesauvegardedanslobjetprdfiniFacesContext.

    Dans le cas dune requte initiale, le droulement du cycle de vie se poursuit par la phase de traduction de larponse:unappeldelamthoderenderResponsesurlobjetFacesContextprovoquelatraductiondelavue,puissarestitutionauclient.

    SilaccslapageJSFsefaitparlintermdiairedunerequtepostback,larestitutiondelavuesefaitcomptetenudesinformationsfourniesdanslarequte.Celleciprendgalementenchargelesdonnesventuellementstockessur le serveur loccasion dune prcdente consultation de la page. JSF assure en effet la conservation desinformationsderequtessurleserveur:cemcanismepermet,parexemple,derestituerfacilementuninternautelesdonnesqueceluiciadjsaisiesdansunformulaire.

    b.PhaseApplicationdesparamtresderequte(Applyrequestvalues)

    lissuedelaphaseprcdente,unevueestassocielapageJSFvisite.Cettevuedisposeobligatoirementdunarbredecomposants.Cescomposantssontalorsparcourussuccessivementpourinvoquerleurmthodedecode().Celleciestchargedanalyserlarequtepourattribueraucomposantlavaleurquidoitluitreaffecte.

    Ilestcourantquecetteaffectationdevaleurncessiteuneconversionpralable:cestlecasnotammentlorsquunezone de texte de formulaire est associe une proprit de composant dont le type est numrique. Si cetteconversionchoue,unmessagederreurestautomatiquementattribuaucomposantenquestion,puisplacenattentedetraitementdanslobjetprdfiniFacesContext.Cemessageestensuiteprisenchargedurantlaphasedetraduction de la rponse pour tre prsent linternaute, en mme temps que les ventuels messages devalidationproduitslorsdelaphaseProcessusdevalidation(voircidessous).Uncomportementsimilaireseproduitsilaffectationdunevaleuraucomposantestsoumiseunevalidationpralable,parexemplepoursassurerquunevaleurnumriquesaisiedansunezonedetexteestbiencompriseentredeuxvaleursV1etV2.

    - 1 - ENI Editions - All rigths reserved

  • Sicertainscomposantsdisposentdunattributimmediatepositionnsurlavaleurtrue,lavalidationetlaconversionventuellementrequisessontdirectementprisesenchargedanscettephaseducycledevie.

    Enplusdepermettre lanalyse de la requte et lattributiondevaleursaux composants, laphaseApplicationdesparamtresderequtetransmetlesvnementsgnrsauniveaudescomposantsgraphiquesprsentsdanslapageJSFaucontexteJSF.

    lafindecettephase,touslescomposantsassocislavuedisposentdunenouvellevaleur.LesmessagesetlesvnementsventuelssontenattentedetraitementparlobjetFacesContext.

    c.PhaseProcessusdevalidation(ProcessValidations)

    Danscettetape,lapplicationJSFeffectuetouteslesvalidationsattenduespourchacundescomposantsdelarbreassocilavue.

    Pourcela,lesattributsdecomposantdfinissantlesrglesdevalidationsontexamins,puiscomparslavaleurdu composant. Lorsque cette valeur est effectivement incorrecte, un message derreur est ajout lobjetFacesContextetlecycledeviesepoursuitdirectementparlaphasedetraductiondelarponse:lapagewebestalorsrestituelinternaute,accompagnedumessagederreurissuduprocessusdevalidation.

    d.PhaseMisejourdumodle(UpdateModelValues)

    ChaquecomposantdinterfaceJSFpeuttreassociunJavaBeanctserveur.Aprsstreassuredelavaliditdes donnes saisies lors de la phase Processus de validation, lapplication JSF parcourt nouveau larbre decomposantspouraffecterlavaleurdechaquecomposantgraphiqueauJavaBeanquiluiestassoci.Lencore,siunproblmedeconversionsurvientaumomentdelamisejourdelapropritduJavaBean,lecycledeviedelapagesepoursuitdirectementpar laphasedetraductionde larponseetunmessagederreuradaptestprsentlinternaute.

    e.PhaseAppeldelapplication(Invokeapplication)

    Lorsquelinternautevalideunformulaire,oucliquesurunlienhypertexte,lapplicationJSFgnrerespectivementunobjetdetype"vnementdeformulaire"ouunobjetdetype"vnementdecommande".Cesobjetssontqualifisdvnementsdeniveauapplication : ils sontprisenchargepardesgestionnairesspcifiquesaucoursdecettephasedontlerleestdementionneruneURLverslaquellelanavigationestdirige.

    f.PhaseRestitutiondelarponse(Renderresponse)

    CettephasecorrespondaumomentolimplmentationJavaServerFacesrendlamainauconteneurenchargedespagesJSPdelapplicationweb.Touslescomposantssontalorsprsentsdanslinterfaceutilisateur,dansltatquiestleleuraumomentosurvientlaphaseRenderresponse.

    - 2 - ENI Editions - All rigths reserved

  • Deuxtypesdvaluationdexpressions

    Lelangagedexpressionsunifiestconupourpermettrelvaluationdesexpressionsdedeuxmaniresdistinctes.

    Cette valuation peut se produire de manire immdiate, instantane : dans ce cas, son rsultat est renvoy linternautedslaphasederestitutiondelapageJSP.

    Lvaluationpeutgalementavoirlieudemanirediffre,cestdirequellepeutsurvenirnimportequelmomentdu cycle de vie de la page. Cemode dvaluation savre indispensable dans le cadre de lamise enuvre de latechnologieJSF,danslamesureolecycledeviephasesmultiplesdespageswebdoitrendrepossiblelvaluationdes expressions aumoment le plus opportun (notamment lors de la capture dun vnement, dune demande devalidation ou de conversion de la valeur dun composant). La dtermination dumeilleurmoment pour valuer uneexpressionrestelachargedelatechnologieimplmentantlelangagedexpressionsunifi.

    1.valuationinstantaneduneexpression

    UnedemandedvaluationinstantanedexpressionauseindunepageJSPsefait laidedelasyntaxe${}.Ellepeuttreutilisedirectementdansletextebrutdelapage,outrereprsenteentantvaleurdelattributvaluedunebalise.Ilfautalors,danscedeuximecas,quelaTLD(TagLibraryDescription)delabaliseenquestionautoriseeffectivementlutilisationduneexpressionentantquevaleurdelattributvalue.

    Le code source cidessous est un exemple dans lequel sont prsents ces deux modes de prise en charge delvaluationinstantane:

    Test de lvaluation instantane Le nom dclar dans la session est ${sessionScope.leNom}.

    Contenu de la proprit "nom" du JavaBean "laPersonne": Le mme rsultat sobtient en crivant simplement ${laPersonne.nom}.

    Dans cet exemple, une premire utilisation de lvaluation instantane dans un texte brut est effectue parlinstruction${sessionScope.leNom} : lexpressionvaluerconcernelavariabledesessionleNom,instancieparlebiaisdeunebalise,dont laccsestrendupossiblepar lexploitationdelobjetimplicitesessionScope.Unesecondeutilisationdelvaluationinstantanedansuntextebrutestprsentelafinducodesourceautraversdelinstruction${laPersonne.nom}:cettefois,lexpressionvaluerconcernelapropritnomdunJavaBeaninstanciedanslapageparlintermdiairedunebalise.

    Cetteexpressionestparailleursgalementutiliseentantquevaleurdelattributvaluedunebalise.

    Quunedemandedvaluationinstantanedexpressionsoitdirectementfaitedansuntextebrut,ouquellelesoitautravers de lattribut value dune balise particulire, elle ne peut concerner que des tentatives daccs en lectureuniquement.IlnestnotammentpaspossibledutiliserunevaluationinstantanedexpressionpourmettrejourunepropritspcifiquedunJavaBean.

    - 1 - ENI Editions - All rigths reserved

  • 2.valuationdiffreduneexpression

    Cemodedvaluation,introduitaveclatechnologieJavaServerFaces,peuttreexploitnimportequelmomentducycledeviedunepageweb.Uneexpressionvaluationdiffreestsymbolisedanslecodesourcedunepagepar lasyntaxe#{}.Ellenepeutpastreutilisedirectementdans letextebrutdunepageweb,contrairementlexpressionvaluationimmdiate.Danslexempleciaprs,lattributvaluedunebalisereprsentantun champ de saisie de type HtmlInputText possde la valeur #{laPersonne.nom} : il sagit dune expression valuation diffre permettant daccder, en lecture commeen criture, la propritnom dun JavaBeannommlaPersonne.

    Lutilisationduneexpressionvaluationdiffrepermettoujoursdaccderenlectureetencritureunedonneparticulire.

    Test de Test de lvaluation diffre "

    Lorsque la page correspondant au code source prcdent est invoque pour la premire fois, lvaluation delexpression#{laPersonne.nom}sefaitaumomentlaphasederestitutiondelarponse.Unaccsenmodelecturela propritnom du JavaBean est alors assur : si cette proprit possde effectivement une valeur, celleci estprsentelinternautedanslechampdesaisie.

    Endehorsdelaccsinitiallapageweb,enparticulierlorsdelasoumissionduformulaire,lexpressionestvaluediffrentsstadesducycledevie,afindepermettrelamisejourdelapropritnomduJavaBeanenfonctiondelasaisie ralise par linternaute. Cette opration est en particulier assure lors des processus de validation et deconversiondelinformation.

    Dans lexemple propos, lvaluation diffre dexpression est utilise pour accder aux proprits dun objetparticulier. Mais lvaluation diffre peut galement sappliquer une expression permettant dinvoquer unemthodeparticuliredunobjet.Cesdeuxnotionssontabordesplusprcismentdanslesparagraphesquisuivent.

    - 2 - ENI Editions - All rigths reserved

  • Utilisationdexpressionspouraccderauxpropritsdunobjet

    Avantdevoircommentaccderauxpropritsdunobjet,ilpeuttreintressantdesattardersurlesdiffrentstypesdobjetsexploitablesetdecomprendrelemcanismepermettantuneapplicationwebdetrouvercesobjets.

    Les objets utilisables dans les expressions (que leurs valuations soient immdiates ou diffres) sont de quatretypes:ilspeuventtredesJavaBeans,descollections,desnumrations,oulundesobjetsimplicitesdfinisparlaspcification.Dfiniruneexpressionfaisantappelunobjetparticulierrevientmentionnerlidentifiantdelobjetenquestion, tel quil a t dclar dune manire ou dune autre auprs de lapplication web. Ainsi, les expressions${laPersonne} et #{laPersonne} sont deux expressions valables pour accder un objet dont lidentifiant estlaPersonne. Cet objet a par exemple pu tre pralablement instanci en tant que JavaBean grce une balisesituedansunepageJSP,oudclarentantquebeanmanagdelapplicationweb,parlintermdiairedeslignessuivantesdfiniesdanslefichierdeconfigurationdelapplication(engnralnommfacesconfig.xml).

    laPersonne premierProjetJSF.Personne Session

    Concrtement, lvaluation dune expression comportant uniquement lidentifiant dun objet est assure parlapplication web au travers de linvocation de la mthode findAttribute sur lobjet reprsentant le contextedapplication luimme.Lidentifiantdelobjetestpassenparamtredecettemthode.Cellecisechargealorsderechercher successivement lobjet en question dans les diffrentes portes : page, request, session et enfinapplication.Silobjetesttrouv,savaleurestconvertieenchanedecaractres,puisrenvoyelinternaute.Danslecasolobjetnexistepas,lavaleurnullestrenvoye.

    Commecelaadjtvoqudanslesexemplespropossprcdemment,laccsauxpropritsdunJavaBeansefaitpar lintermdiairedeloprateurpoint ("."). Ilestgalementpossiblede faireappel lanotationparcrochets("[]")pour obtenir lemme rsultat. Bien sr, pour faire cho la remarque faite plus haut propos des typesdobjetsexploitables,cesnotationspeuventgalementservirobteniruneinstanceparticuliredunenumration,ouunlmentspcifiquedunecollection.Ainsi,lesdeuxexpressionsquisuiventsontquivalentes:ellespermettenttoutesdeuxdatteindrelapropritnomdunJavaBeandontlidentifiantestlaPersonne:

    ${laPersonne.nom} ${laPersonne["nom"]}

    Lorsquunepropritparticulirecorrespondellemmeuneinstancedeclasse,ilestgalementpossibledatteindreles proprits de cette instance. Lexemple suivant illustre deux moyens dafficher le nom de la ville du lieu dersidence dune personne : lobjet laPersonne dispose dune proprit adresse, issue dune classe personnalisepossdantunepropritville.

    ${laPersonne.adresse["ville"]} ${laPersonne.adresse.ville}

    DanslecasdelutilisationdexpressionsentantquevaleurdelattributvalueduncomposantJSF,ilestpossibledecombinerdemultiplesexpressions,en lesassociantventuellementavecdu textebrut,comme lemontre lexemplesuivant:

    - 1 - ENI Editions - All rigths reserved

  • Utilisationdexpressionspouraccderauxmthodesdunobjet

    LinvocationdemthodesgrceaulangagedexpressionsestrendupossibleaveclatechnologieJavaServerFaces.CesexpressionsdoiventtreutilisesquentantquevaleursdattributsdebalisesreprsentantdescomposantsJSFspcifiques. Lexcutiondesmthodesconcernesengendreuntraitementparticulieragissantsur lecomposant luimme : il sagit gnralement dassurer la gestion vnementielle (slection dun lment dans une zone de listedroulante,clicsurunbouton,etc.)oudengagerunprocessusdevalidationdelinformationsaisiedanslecomposant.

    Lecodesourcecidessusmontrequunebalise,reprsentantunchampdesaisiedetypezonedetexte,possdeunattributvalidator. Lavaleurde celuici corresponduneexpressiondemthode,dont linterprtationprovoquelappeldelamthodecheckNamedunbeanmanagnommbeanAttributValidator.CettemthodepeutparexempletrechargedevrifierquelinformationsaisiedanslazonedetextecontientaumoinsuneoccurrencedelalettreF.

    Demme,lecodesourceprsenteunebalise.Celleciestrestituegraphiquementsouslaformedunboutondesoumissiondeformulaire.ElledisposedunattributactionListener,dontlavaleurcorresponduneexpressiondemthode.LamthodeenquestionsenommetraitementClicetestdfiniedansuneclassedont lebean manag beanAction est une instance. Le rle de la mthode est dassurer la gestion des clics raliss parlutilisateursurleboutondesoumission.

    Lvaluationdesexpressionsdemthodesindiquesalieudemanirediffre:celadoitsystmatiquementtrelecas,danslamesureolestraitementsdemandspeuventtreassursdiffrentestapesducycle

    deviedelapageJSP.Parexemple,lamthodementionnedanslattributvalidatordelabaliseestappeledurantlaphaseProcessValidation,alorsquelamthodetraitementClicestinvoquependantlaphaseInvokeApplication.

    Dans lexemplepropos, lesbeansmanagsvoquspeuventtreduntypequelconque.Parcontre, lesmthodesmentionnesdanslesexpressionsdoiventseconformerauxcontraintesindiquesdanslaTLD(TagLibraryDescription).En loccurrence, la signature de la mthode utilise comme valeur de lattribut actionListener dune balise doit obligatoirementpossderunargumentde typeActionEvents.Demme,uneexpressiondemthodeutilisecommevaleurdelattributvalidatordunebalisedoitimprativementfairerfrenceunemthode possdant trois arguments : le premier de type FacesContext, le second de type UIComponent et letroisimedetypeObject.

    Dune manire gnrale, la signature dune mthode utilise dans une expression de mthode dpend donc delattributdebalisedanslequelelleestplace.Lensembledescontraintesrespecterpeuttreretrouvsurleweb,dans les pages de documentation concernant les TLD (par exemple, ladressehttp://java.sun.com/javaee/javaserverfaces/1.2/docs/tlddocs/index.html).

    - 1 - ENI Editions - All rigths reserved

  • Expressionsavecoprateurs

    LesexpressionsdontlvaluationestdemandeauseindespagesJSPduneapplicationwebpeuventfaireusagedediffrentsoprateurs,afindefaciliterlobtentiondersultatsadaptsauxattentesdesinternautes.Parmilestypesdoprateursutilisables,onretrouveleshabituelsoprateursarithmtiques,logiquesetrelationnels.Cesoprateurspeuventtreindiffremmentutilissdansdesexpressionsfaisantappeldesconstantes,desvaleursdepropritsdobjets,oudesrsultatsissusdelexcutiondemthodesdeclasses.Lalistesuivantereprsentelesoprateurslespluscourammentutiliss,rpartisparcatgorie:

    Oprateursarithmtiques:+,-,*,/,%,modetdiv.

    Oprateurslogiques:and,&&,or,||,not,!Oprateursrelationnels:==,eq,!=,ne,,gt,=,le.

    Ilexisteenoutreunoprateurparticuliernotempty,permettantdesavoirsilavaleurdunepropritoulersultatdunemthodeestnull.

    VoiciunexempledepageJSP,illustrantlexploitationdecesdiffrentsoprateursdansdesexpressions:

    Test des oprateurs dans les expressions

    La personne n1 est-elle un client de la boutique ayant command dans le mois en cours? ${laPersonne1.clientBoutique and laPersonne1.achatMoisCourant} La personne n2 a-t-elle le mme ge que la personne n1? ${laPersonne1.age == laPersonne2.age} La personne n2 habite-t-elle dans la mme ville que la personne n1? ${laPersonne1.adresse.ville ne laPersonne2.adresse.ville} La personne n2 dispose-t-elle dune adresse email ? ${!empty laPersonne2.email}

    - 1 - ENI Editions - All rigths reserved

  • PrincipauxlmentsdelabibliothqueHTML

    Aprs une prsentation des principaux attributs communs lensemble des balises de la bibliothque HTML, ceparagraphe passe en revue les principales balises reprsentant les composants graphiques Java Server Faces, etmentionnelenometlerledeleursattributsspcifiqueslesplusimportants.

    1.PrincipauxattributscommunsauxbalisesdelabibliothqueHTML

    Attributbinding

    Sert indiquer une expression permettant de lier le composant reprsent par la balise avec une proprit deJavaBean.

    Attributid

    Permetdindiquerlidentifiantassociaucomposantreprsentparlabalise.

    2.Prsentationdesbalisesetdeleursprincipauxattributsspcifiques

    a.Balisecolumn

    CettebaliserestitueunecolonneparticulireduncomposantdetypeUIData.Sesprincipauxattributssont:

    footerClass

    Contientunelistedeclassesdestylesappliquesaupieddecolonne.Lesnomsdeclassesdestylessontsparslesunsdesautresparlecaractreespace.

    headerClass

    Contient une liste de classes de styles appliques lentte de colonne. Les noms de classes de styles sontsparslesunsdesautresparlecaractreespace.

    b.BalisecommandButton

    Cettebalisesertreprsenterunboutondesoumissiondeformulaireouunboutonderinitialisationdeschampsdunformulaire.Voicisesprincipauxattributsspcifiques:

    action

    Permet de dfinir le cas de navigation utilis lorsque linternaute clique sur le composant. Sil est ncessairedobtenirunegnrationdynamiqueducasdenavigation,lavaleurdelattributactiondoitrfrencerunemthodecapablederenvoyerunobjet:linvocationdelamthodetoString()decetobjetdoitalorscorrespondrelundescasdenavigationprvusdanslapplicationweb.

    actionListener

    Permetdementionnerunemthodedexpressionidentifiantungestionnairedvnementscapabledeprendreencharge le clic sur le composant. Ce gestionnaire dvnements est obligatoirement une mthode de type voidacceptantenargumentunobjetdetypeActionEvent.

    value

    Sert indiquer le texte affich sur le composant. La valeur utilise pour cet attribut peut correspondre uneexpressionpointantsurunepropritdebeanmanag.

    disabled

    Lavaleurdecetattributestunboolenindiquantsilecomposantpeut,ounon,treutilisparlinternaute.Danslecasolecomposantnestpasutilisable,ilestgraphiquementreprsentparunboutongris.

    - 1 - ENI Editions - All rigths reserved

  • type

    Sertprciserletypeducomposant.Lesvaleurspossiblessontsubmit,pourreprsenterunboutondesoumissiondeformulaire,etreset,pourobtenirunboutondeffacementdeschampsdeformulaire.Lavaleurpardfautestsubmit.

    c.Baliseform

    CettebaliserestitueunebaliseHTMLcorrespondantunformulairedesaisie.Elleacceptelesprincipauxargumentssuivants:

    styleClass

    Listedesclassesdestylesappliqueslorsquececomposantestrestitugraphiquementdanslinterfaceweb.Lesnomsdesclassesdestylessontsparslesunsdesautresparlecaractreespace.

    target

    Indiquelaframedanslaquellelersultatdelasoumissionduformulaireseraaffich.

    d.BaliseinputHidden

    Cettebalisepermetdereprsenterunchampdeformulairecach.Parmicesattributs,lesplusremarquablessontlessuivants:

    converter

    Cetattributsertassocierunconvertisseurspcifiqueaucomposant.Leconvertisseurenquestiondoittredfinidans le fichier de configuration des ressources de lapplication web, ou correspondre lun des convertisseursstandards.

    converterMessage

    Lavaleurdecetattributcorrespondunmessageprsenterlutilisateurencasdchecdelaconversion.Cemessagevientsurchargerceluiquiestventuellementdfiniparleconvertisseurassociaucomposant.

    required

    Cetattributestunflagpermettantdeprcisersilecomposantdoit,ounon,possderunevaleuraumomentdelasoumissionduformulaire.

    requiredMessage

    Cetattributpermetdindiquerlemessageprsenterlinternautelorsquelecomposant,dontlattributrequiredestpositionnsurtrue,nepossdepasdevaleuraumomentdelasoumissionduformulaire.

    validator

    Cetattributsertassocierunvalidateurspcifiqueaucomposant.Levalidateurenquestiondoittredfinidanslefichierdeconfigurationdesressourcesdelapplicationweb,oucorrespondrelundesvalidateursstandards.

    validatorMessage

    Lavaleurdecetattributcorrespondunmessageprsenter lutilisateurencasdchecdelavalidation.Cemessagevientsurchargerceluiquiestventuellementdfiniparlevalidateurassociaucomposant.

    value

    Cetattributpermetdespcifierlavaleurducomposant.

    valueChangeListener

    Lavaleurdecetattributdoitcontenirunemthodedexpressionrfrenantungestionnairedvnementcapable

    - 2 - ENI Editions - All rigths reserved

  • deprendreenchargeleschangementsdevaleursralissdanslecomposant.LegestionnairedvnementdoitobligatoirementtreunemthodedetypevoidetaccepterunargumentdetypeValueChangeEvent.

    e.BaliseinputSecret

    Cettebaliseestutilisepour restituerunezonede textede typemotdepasse.Outresesattributsconverter,converterMessage, required, requiredMessage, validator, validatorMessage, value, valueChangeListener, dont lerleestidentiqueceluiquilsjouentdanslecadredelabaliseinputHidden,labaliseinputSecretpeutexploiterlesattributssuivants:

    disabled

    Cetattributaccepteunevaleurboolennechargedindiquersilecomposantestutilisableounonparlinternaute.

    maxlength

    Lavaleurdecetattributcorrespondaunombremaximumdecaractrespouvanttresaisisdanscecomposant.

    redisplay

    Cetattributestutilispourindiquerquelemotdepasseventuellementprcdemmentsaisidanslecomposantdoittreraffichchaquenouvelleprsentationduformulaire.Pourdesraisonsvidentesdescurit,lavaleurpardfautdecetattributestfalse.

    f.BaliseinputText

    Cette balise reprsente un champ de saisie de type texte. Ses attributs sont identiques ceux de la baliseinputSecret.

    g.BaliseinputTextArea

    Cettebalisereprsenteunezonedetextemultilignes,etdisposedesattributscitsprcdemmentconcernantlabaliseinputHidden.Elleprsenteenoutrelesdeuxattributssuivants:

    cols

    Cetattributaccepteunevaleurnumriquecorrespondantaunombredecolonnescaractrisantlecomposant.

    rows

    Cetattributaccepteunevaleurnumriquecorrespondantaunombredelignescaractrisantlecomposant.

    h.Balisemessage

    Cettebalise reprsenteunmessage individuel,obligatoirementassociuncomposantgraphiquesitudans lapage web. Elle permet notamment de prsenter les raisons qui ont provoqu une erreur de conversion ou devalidationdelavaleursaisiedanslecomposantassoci.Lesattributsdecettebaliselespluscourammentutilisssont:

    for

    CetattributsertprciserlidentifiantducomposantJSFconcernparlesmessages.

    errorClass,fatalClass,infoClass,warnclass

    CesquatreattributssontutilisspourdsignerlesclassesdestyleCSSappliquerpourdesmessagesdeniveaudesvrit"ERROR","FATAL","INFO"et"WARN".

    i.Balisemessages

    Labalisemessagesestutilisepourlaffichagedesmessagesderreurdeconversionoudevalidationdelavaleursaisiedans lundes composants JSFprsent sur la pageweb. Laplupart des attributs de cette balise sont les

    - 3 - ENI Editions - All rigths reserved

  • mmesqueceuxdelabalisemessage,lexceptiondelattributfor,nondisponiblepourlabalisemessagesdanslamesureocellecineconcernepasuncomposantJSFparticulier.

    j.BaliseoutputLink

    CettebalisesertrestitueruneancreHTML.Sonattributleplusimportantestvalue:ilpermetdedfinirlavaleurdelattributhrefdelancre.Lesprincipauxautresattributssont:

    converter

    CetattributestutilispouraffecteruneinstancedelaclasseConverteraucomposant.

    disabled

    Lutilisationdecetattributestncessairepourindiquerquelecomposantnedoitjamaistreenmesurederecevoirlefocus,outreprisencompteaumomentdelasoumissionduformulaire.

    target

    CommecestlecaspourlabaliseHTMLreprsentantuneancre,cetattributtargetpermetdespcifierlenomdelaframedanslaquelleledocumentciblparlecomposantdevrasafficher.

    k.BaliseoutputText

    Cettebalisesertreprsenteruntextebrutauseindunepageweb.DanslecasolundesattributsstyleClass,style,diroulangestutilis,letextebrutenquestionestrestitudanslapageentantencadrpardesbaliseset.

    converter

    Cetattributestutilispourassocierunconvertisseuraucomposant.

    value

    Permetdespcifierlachanecorrespondantautextebrutprsenterdanslapage.

    l.BalisepanelGrid

    CettebaliseestchargederestitueruntableauHTMLcomposduncertainnombredecolonnes.Lenombredelignesestdtermindynamiquementcomptetenudunombredecomposantspositionnerdansletableau.Danslexemplesuivant,labalisepanelGridrassemblequatrecomposants,reprsentspardesbalisesoutputText.

    LarestitutioncorrespondanteestuntableauHTMLdedeuxlignesetdeuxcolonnes.

    item1item2 item3item4

    Voicilesprincipauxattributsdisponiblespourcettebalise:

    bgcolor

    Cetattributsertindiquerlacouleurdefonddutableau.

    border

    - 4 - ENI Editions - All rigths reserved

  • Lavaleurdecetattributindiquelpaisseurdesborduresdutableau.

    width

    Cetattributpermetdespcifier,commeenHTML,lalargeurdutableau.

    footerClass,headerClass

    Cesattributsserventmentionnerlalistedesclassesdestylesapplicablesauxenttesetpiedsdecolonnes.

    m.BaliseselectBooleanCheckbox

    Cettebalisepermetderestituerunchampdesaisiedetypecasecocher.Elledisposedesattributsconverter,converterMessage, required, requiredMessage, validator, validatorMessage, value, valueChangeListener, djvoquspourlabaliseinputHidden.

    n.BaliseselectManyCheckbox

    Ce composant permet de restituer un tableauHTML contenant un ensemble de cases cocher. Chaque case cocherindividuellepeuttrereprsenteparlebiaisdunebalise,issuedelabibliothqueCore.

    Sidenombreusescasescocherdoiventtreprsentes,ilestalorsprfrabledutiliseruneuniquebalise, plutt quun ensemble de balises . La prsentation de la balise

    selectManyListBox,situeplusloindansceparagraphe,montreunusagepossibledelabalise.

    LarestitutiondansunepageHTMLpeutcorrespondreaucodesourcesuivant:

    choix n1 choix n2 choix n3

    Les attributs de la balise selectManyCheckbox sont identiques ceux de la baliseselectBooleanCheckbox. Il estnanmoinspossibledindiquer,grceunattributlayout,lesensdaffichagedescasescocher:silavaleurdecetattributestgalepageDirection,alorslescasesserontprsentesencolonne.Silattributenquestionnest

    - 5 - ENI Editions - All rigths reserved

  • pasmentionn,ousisavaleurestlineDirection,alorslescasescochersontaffichessuruneligneunique.

    o.BaliseselectOneListbox

    Cettebalisesertreprsenterunezonedelistenondroulantechoixunique,correspondantlabaliseHTML. Chacun des lments slectionnables est identifi par une balise , dont les attributspermettent de spcifier la valeur et le label de llmentenquestion. Il estaussipossiblede restituer tous leslmentsautraversduneuniquebalise.

    LesprincipauxattributsdelabaliseselectOneListboxsontlesmmesqueceuxdelabaliseselectBooleanCheckbox.Unattributsizepermettoutefoisdedfinirlenombredlmentsvisiblesdanslazonedeliste.

    p.BaliseselectManyListbox

    Cettebalisepermetdegnrerunezonedelistenondroulantechoixmultiples.ElleestdoncrestitueparunebaliseHTML disposantdunattribut multiple.Commecest le cas pour la baliseselectOneListbox, leslmentsslectionnablespeuventtrereprsentssoitparplusieursbalises,soitparuneunique.

    Dans lexemple cidessus, les lments de la zone de liste sont dfinis par une balise , dontlattribut value rfrence un beanmanag nomm mesPrix. Ce bean peut, par exemple, tre issu dune classedrivedeArrayListetcontenir latotalitdeslmentsslectionnables,quisontenralitdesinstancesdelaclassejavax.faces.model.SelectItem.

    package premierProjetJSF;

    import java.util.ArrayList; import javax.faces.model.SelectItem;

    public class Prix extends ArrayList {

    public Prix() { SelectItem element; for (int i=1;i

  • ouparuneuniquebalise.

    LesprincipauxattributsdelabaliseselectOneMenusontlesmmesqueceuxdelabaliseselectBooleanCheckbox.

    r.BaliseselectManyMenu

    Tout comme la balise selectManyListBox, la balise selectManyMenu permet de restituer une zone de liste nondroulantechoixmultiples.Elledisposecependantde laparticularitdenepermettre lavisualisationquedunseullmentlafois.LabaliseHTMLrestitueestdonc,avecunattributmultiple,ainsiquunattributsizedevaleurgale1.

    s.BaliseselectOneRadio

    Cettebalisepermetdereprsenterungroupedeboutonsradio.Leschoixpossiblespeuventtredfinislaidedunensembledebalisesouparlintermdiaireduneuniquebalise.

    LesprincipauxattributsdelabaliseselectOneRadiosontlesmmesqueceuxdelabaliseselectBooleanCheckbox.Ilexistetoutefoisunattributlayoutpermettantdindiquer lesensdelaffichagedesboutonsradio(enligneouencolonne).

    - 7 - ENI Editions - All rigths reserved

  • PrincipauxlmentsdelabibliothqueCore

    CeparagrapheprsentelesprincipalesbalisescontenuesdanslabibliothqueCore,ainsiqueleursattributslespluscaractristiques.

    1.BaliseactionListener

    CettebalisesertaffecteruneinstanceduneclasseimplmentantActionListeneruncomposantJSFparticulier,dans le but de grer les vnements de type ActionEvent survenant sur le composant en question. LexemplesuivantillustrelutilisationdunebaliseactionListenerassocieunebalisecommandButton.

    LattributtypepermetdementionnerlenomcompletdelaclassechargedegrerlActionEvent.Cetteclassedoitobligatoirementimplmenterlinterfacejavax.faces.event.ActionListener.

    2.BaliseconvertDateTime

    Labalise convertDateTime est utilise pour affecter un convertisseur de typeDateTimeConverter un composantparticulier.Celapeutpermettre,parexemple,desassurerquelavaleursaisiedansunchampcorrespondbienunedatespcifiedansunformatdonn.LexemplesuivantmontrelassociationdunebaliseconvertDateTimeavecunebaliseinputText.

    a.AttributdateStyle

    Cetattributpermetdespcifiercomment ladatedoittre formate.Lesvaleursautorisessontdefault, short,medium,long,etfull.Cetattributnestprisencomptequesilattributtypeestpositionnsurdateouboth.

    b.Attributpattern

    Lattributpatternestemploypourmentionnerunformatdedatepersonnalis.Ceformatdoitrespecterlasyntaxementionnedanslaclassejava.text.SimpleDateFormat.

    c.AttributtimeStyle

    Cetattributsertprcisercommentlheuredoittre formate.Cetattributnestprisencomptequesi lattributtypevauttimeouboth.LesvaleursautorisespourlattributtimeStylesontdefault,short,medium,long,etfull.

    d.Attributtype

    Permetdeprciserletypedeconversion:dateuniquement,heureuniquement,oulesdeux.Lesvaleursquepeutprendrecetattributsontdate,timeouboth.

    3.BaliseconvertNumber

    Cette balise permet dassocier un convertisseur de type NumberConverter un composant JSF particulier, pourassurerun formatage correctdesnombres,pourcentagesetdevises. Le code source suivantmontre lassociationdunebaliseconvertNumberavecunebaliseinputText.

    - 1 - ENI Editions - All rigths reserved

  • Lesprincipauxattributsdecettebalisesontlessuivants:

    a.Attributpattern

    CetattributpermetdepersonnaliserleformatutiliserpourconvertirlavaleurducomposantJSF.

    b.Attributtype

    Cet attribut sert indiquer le typede la valeur du composant. Les valeurs autorises sontnumber, currency etpercentage.

    4.Baliseconverter

    LabaliseconverterestutilisepourassocierunconvertisseuruncomposantJSFparticulier.

    LeprincipalattributdecettebaliseestconverterId.Celuicirfrenceunconvertisseurpersonnalisdclardanslefichierdeconfigurationdesressourcesdelapplicationweb.Ceconvertisseurestobligatoirement issuduneclasseimplmentantlinterfacejavax.faces.conver.Converter.

    5.BaliseloadBundle

    CettebalisepermetdinstancierunResourceBundleparticulierauseindunepagewebdonne.

    ...

    Cettebalisenepossdequelesdeuxattributssuivants:

    a.AttributbaseName

    CetattributsertprciserlenomdelafamilleduResourceBundleinstancier.

    b.Attributvar

    IlestutilispourattribuerunidentifiantspcifiqueauResourceBundlecr,demanirelerendreutilisabledanslapageJSP.

    6.BaliseselectItem

    CettebalisepermetdassocieruneinstancedelaclasseUISelectItemuncomposantJSFparticulier.

    Comme cela a t expliqu prcdemment dans la section Principaux lments de la bibliothque HTML de cechapitre, cette balise peut notamment tre associe aux balises selectManyCheckbox, selectManyListbox,

    - 2 - ENI Editions - All rigths reserved

  • selectManyMenu, selectOneListbox et selectOneRadio. De telles utilisations servent dfinir les lmentsslectionnablesdezonesdeliste(droulantesounon),decasescocher,deboutonsradios.

    a.AttributitemDisabled

    Cetattributpermetdindiquer si llmentslectionnable, reprsentpar labaliseselectItem, peutounontreutilisableparlinternaute.

    b.AttributitemLabel

    Lavaleurdecetattributcorrespondaulabelprsentlutilisateurdanslinterfaceweb.

    c.AttributitemValue

    Lavaleurdecetattributcorrespond lavaleurrenvoyeauserveursi llmentenquestionestslectionnaumomentdelasoumissionduformulaire.

    7.BaliseselectItems

    CettebalisepermetdassocieruneinstancedelaclasseUISelectItemsuncomposantJSFparticulier.Ellepeutdoncnotammentservirdfinirlensembledeslmentsslectionnablesdunezonedeliste(droulanteounon),casescocherouboutonsradio.UnexempledutilisationdecettebaliseestprsentlasectionPrincipauxlmentsdelabibliothqueHTMLdecechapitre,danslarubriquerelativelabaliseselectManyListbox.

    Lattribut leplus importantdecettebaliseestvalue: ilestutilispour identifieruneListouuneArrayList danslaquelleestregroupelatotalitdeslmentsslectionnablesducomposantJSFassoci.

    8.BalisevalidateDoubleRange

    CettebalisepermetdassocieruneinstancedelaclasseDoubleRangeValidatoruncomposantJSFparticulier.Cetteactionestdestinecontrlerlavaleurdececomposant,quipeutnotammenttreunnombredcimal.LexemplesuivantcorrespondlassociationdelabalisevalidateDoubleRangeavecunebaliseinputText.

    Lesdeuxprincipauxattributsdecettebalisesontminimum etmaximum. Ilspermettentdedfinir respectivement lesvaleursminimalesetmaximalesautorisespourlecomposantJSFassoci.

    9.BalisevalidateLength

    CettebalisepermetdassocieruneinstancedelaclasseLengthValidatoruncomposantJSFparticulier,danslebutdecontrlerlalongueurdelachanedecaractressaisiedanslecomposantenquestion.

    Lesdeuxprincipauxattributsdecettebalisesontminimum etmaximum. Ilspermettentdedfinir respectivement leslongueursdechaneminimaleetmaximaleautorisespourlecomposantJSFassoci.

    - 3 - ENI Editions - All rigths reserved

  • 10.BalisevalidateLongRange

    CettebalisejoueunrlesimilaireceluidelabalisevalidateDoubleRange:associeuncomposantJSFparticulier,elle sert dfinir un validateur charg de contrler la valeur du composant. Ce validateur est de typeLongRangeValidator:siceluiciestcapabledassurerlecontrledesvaleursnumriquesentires,ilnepeutenaucuncasprendreenchargeletraitementdevaleursnumriquesdcimales,contrairementauDoubleRangeValidator.

    Les deux principaux attributs de la balise validateLongRange sont minimum et maximum. Ils permettent de dfinirrespectivementlesvaleursminimalesetmaximalesautorisespourlecomposantJSFassoci.

    11.Balisevalidator

    CettebalisepermetdassocierunvalidateurpersonnalisuncomposantJSFspcifique.Danslexemplesuivant,labalisevalidatorestassocieunebaliseinputSecret:levalidateurpersonnalispeutparexempletrechargdevrifierlaconformitdunmotdepassecomptetenuduncertainnombredecontraintes.

    LeprincipalattributdecettebaliseestvalidatorId.Celuiciidentifielevalidateurpersonnalis,telquilatdfinidanslefichierdeconfigurationdesressourcesdelapplicationweb.Cevalidateurdoitobligatoirementtreissuduneclasseimplmentantlinterfacejavax.faces.validator.Validator.

    12.BalisevalueChangeListener

    CettebalisesertassocieruneinstancedeclasseimplmentantlinterfaceValueChangeListeneruncomposantJSFparticulier,dans lebutdecapturer lesvnementsdetypeValueChangeEventgnrsparcecomposant.LecodesuivantmontrecommentunebalisevalueChangeListenerpeuttreassocieunebaliseinputTextarea.

    Le principal attribut de cette balise est type : il sert indiquer le nom complet de la classe reprsentant leValueChangeListener.

    13.Baliseview

    CettebalisetientlieudeconteneurpourlensembledesbalisesissuesdesbibliothquesHTMLetCore.

    Elleprsentedeuxattributsprincipaux:beforePhaseetafterPhase.

    LattributbeforePhasepermetdespcifierunemthodedontlinvocationseproduitsystmatiquementavantchaquechangementdephase(hormislaphasederestaurationdelavue).Lamthodeenquestiondoitobligatoirementtredetypevoidetaccepterunargumentdetypejavax.faces.event.PhaseEvent.

    LattributafterPhasepermetquantluidementionnerunemthodedestinetreexcutelissuedechaquechangementdephase(hormislaphasederestaurationdelavue).CettemthodedoitncessairementprsenterlesmmescaractristiquesquecellevoquedanslecasdelattributbeforePhase.

    - 4 - ENI Editions - All rigths reserved

  • DiagrammedeclassesrelatifauxcomposantsstandardsJSF

    VoicilesprincipalesclassesissuesdeUIComponentBase.

    IlexistegalementdenombreuxcomposantsJSFinstancispartirdeclassesdrivesdeUIOutput.Lesclassesenquestionsontreprsentesdanslediagrammesuivant:

    - 1 - ENI Editions - All rigths reserved

  • Introduction

    Ce chapitre prsente les aspects thoriques mis en uvre dans la technologie Java Server Faces. partir dunexemplesimple,servantdillustrationpour lensembleduchapitre,lestapesdecrationdunepagewebexploitantdes composants JSF seront abordes. Aprs une prsentation des multiples composants graphiques mis ladisposition du dveloppeur, les processus de validation et de conversion des donnes saisies sont expliqus. LesprincipesgnrauxmisenuvredanslaliaisondecomposantsdesJavaBeanssontgalementvus,ainsiqueltudedumodledenavigationexploitparJSF.Enfin,cechapitresetermineparuneprsentationdesdiffrentesphasesconstituantlecycledeviedunepage.

    - 1 - ENI Editions - All rigths reserved

  • DescriptiondelapplicationJSFdvelopper

    Lebutdeceparagrapheestdeprsenterlapplicationwebquiserviradillustrationauxdiffrentspointsabordsdanscechapitre.Autraversdunexemplesimplesurleplanconceptuel,ilserapossibledetraiterlesaspectsessentielsdela technologie JavaServer Faces, afin den avoir rapidement une vue assez claire. Pour lemoment, le travail danslenvironnementdedveloppementEclipsenestpasabord:celaferalobjetdeschapitressuivantsdecetouvrage.Laccentestpluttmis ici sur lesconcepts JSF,quipeuventnaturellementtreappliqusdautresoutils, telsqueNetBeansetJavaSunStudioCreator.

    LapplicationwebdvelopperdanscechapitreestconstituedetroispagesJSP.Lapremiredentreelles,laplusimportante, proposeun formulaire destin permettre la saisie dinformations lies lidentitdunepersonne. Lafigureprsentecidessousenestuneillustration.Lesdeuxautrespagesdelapplicationweb,dontlescodessourcene seront pas prsents compte tenu de leur simplicit, sont les pages vers lesquelles la navigation pourra treorienteaumomentdelavalidationduformulaire.Lapremiredecesdeuxpagesdevratreprsentelinternauteencasderussitedelinscription,lasecondedevraltredanslecascontraire.

    Outreleshabituelslmentsdeformulaire(zonesdetexte,casescocher,zonedeliste,etc.),lapageprincipaledelapplicationcomportedescontraintesdestinesgarantirlafiabilitdesdonnessaisies.Enloccurrence:

    l LeschampsNom,DatedenaissanceetSexedoiventobligatoirementtrerenseigns.

    l LechampNomdoitconteniruntextedelongueurcompriseentre5et100caractres.Unetellecontrainteest,parexemple,toutfaitenvisageabledanslecasolenomdoittreparlasuitestockdansunchampdebasededonnesdontlalongueurnepeutpasexcder100caractres.

    l LechampDatedenaissancedoitobligatoirementtreauformatJJ/MM/AAAA.Parexemple,17/07/2008.

    Encasdenonrespectdescontraintes,desmessagesderreursexplicitesdevronttreprsents linternaute,enregarddeschampsdesaisieconcerns,dslavalidationduformulaire.

    - 1 - ENI Editions - All rigths reserved

  • - 2 - ENI Editions - All rigths reserved

  • Architectureetfichiersdeconfiguration

    1.ArchitectureduneapplicationJSF

    UneapplicationJavaServerFacesdoitobligatoirementrespecterlaspcificationrelativeauxservlets(version2.3ouplus rcente), ainsi que la spcification Java Server Pages (version 1.2 ou plus rcente). En consquence,larchitecture dune application JSF est similaire celle dune application web classique mise en uvre par unconteneurdeservlets:larborescenceestconstituedetroisdossiers:

    l Lepremier,pardfautnommsrc,estdestinaustockageducodesourcedesclassesJavautilisesparlapplication(JavaBean,couteurs,validateurspersonnaliss,convertisseurspersonnaliss,etc.).Ilsertaussi larchivage des fichiers dextension .properties, exploits notamment par lapplication pour faciliter soninternationalisation.

    l LesecondregroupelecodecompildesclassesJavavoquesprcdemment.Cedossiersenommebuild.

    l Ledernierdossier,appelpardfautWebContent,contientlesressourcesdestinestrepubliesparlemoteurdeservlets,principalementlespagesJSP/JSF.Cerpertoireagalementpourrlederegrouperlesfichiersdeconfigurationdelapplicationweb,savoirledescripteurdedploiement,ainsiquele(s)fichier(s)deconfigurationdesressourcesdelapplication(voircidessous).

    LafiguresuivantemontrelarchitectureduneapplicationJSF,tellequelleseprsentedanslexplorateurdeprojetsdelenvironnementdedveloppementEclipse.

    LenomdesrpertoiressrcetWebContentpeuttrechoisilibrementaumomentdelacrationdelapplication.Dansle cas o les valeurs par dfaut ne sont pas utilises, les choix raliss sont mmoriss dans le fichier deconfigurationduprojet.

    Demme,lorsquelenomdufichierdeconfigurationdesressourcesdelapplicationJSFestpersonnalis(sonnompardfautest facesconfig.xml), ou sil existeplusieurs fichiersde configurationde ressources, les changementssontrpertorisauseindudescripteurdedploiementpar lintermdiairedunebalise,commelemontrelecodesourcesuivant:

  • xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> deuxiemeJSF ...

    javax.faces.CONFIG_FILES /maConfig/faces2-config2.xml

    2.FichiersdeconfigurationdesressourcesduneapplicationJSF

    La technologie JavaServerFacesest conuepourpermettre la configurationdes ressourcesexploitablesparuneapplication web au moyen dun ou de plusieurs fichiers de configuration. Ces fichiers sont appels fichiers deconfigurationdes ressources: ilsservent rpertorieret initialiser les ressources tellesque les JavaBeanset lesrglesdenavigation.

    a.Localisationdu/desfichier(s)deconfigurationdesressources

    Commecelaatprcisdansleparagrapheprcdent,uneapplicationJSFdebaseutiliseununiquefichierdeconfigurationdesressourcesdnommfacesconfig.xml,mais ilestpossibledendfinirdavantage.CesfichiersXML contiennent tous une balise racine encadrant dautres balises enfants reprsentant lesressourcesgres.Unexempledecontenudefichierdeconfigurationderessourcesestprsentplusloindanscechapitre.

    Aumomentdudmarragedelapplicationweb,leoulesfichiersdeconfigurationdesressourcessontrecherchsdanslarborescenceselonlundesprocdssuivants:

    l Recherche dun fichier /METAINF/facesconfig.xml dans lun des fichiers JAR ventuellement prsentsdanslerpertoire/WEBINF/lib de lapplicationweb.Sice fichierest trouv, ilestexploitentantquefichierdeconfigurationdesressources.

    l Recherche dun paramtre initial nomm javax.faces.application.CONFIG_FILES dans le descripteur dedploiementdelapplicationweb.Lorsqueceparamtreesttrouv,savaleurcontientlalistedesnomsdefichiers de configuration des ressources, spars par des virgules. Cemode de dclaration est pratiquelorsquelapplicationJSFestdetailleimportanteetquesonarchitectureestconfieplusieurspersonnes.

    l Recherchedunfichierfacesconfig.xmldanslerpertoire/WEBINFdelapplication.CestlemoyenleplussimpledeconfigureruneapplicationJSFcestaussilechoixretenuparlenvironnementEclipselorsquelesparamtresproposspardfautaumomentdelacrationdunprojetJSFsontretenus.

    b.Modedexploitation

    Toutes les applications JSF sont reprsentes en mmoire sous la forme dune instance de la classejavax.faces.application.Application. Cet objet est utilis notamment pour regrouper toutes les ressourcesutilisables.

    Audmarragede lapplication, le(s) fichier(s)de configurationdes ressources sontparcouruspourdterminer lalistedesobjetscrerpuisajouterlobjetApplication.PlusieursmthodesdistinctesdelaclasseApplicationsontutilisespourralisercesoprations.Voicileurssignatures:

    public abstract Converter createConverter(String converterId) public abstract Converter createConverter(Class targetClass)

    public abstract Validator createValidator(String validatorId) throws FacesException

    public abstract UIComponent createComponent(String componentType) throws FacesException public abstract UIComponent createComponent( ValueBinding componentBinding,

    - 2 - ENI Editions - All rigths reserved

  • FacesContext context, String componentType) throws FacesException public UIComponent createComponent( ValueExpression componentExpression, FacesContext context, String componentType) throws FacesException

    LesmthodesnommescreateConverter() sontutilisespourinstancierlesconvertisseurspersonnaliss,alorsque lamthodecreateValidator() sert mettre la dispositionde lapplication lesvalidateurspersonnaliss.Quant aux mthodes createComponent(), elles sont destines assurer la cration des autres types decomposantsJSFpersonnaliss.

    Lecodesourcecidessousestunextraitde fichierdeconfigurationderessources,dans lequelsontdclarsunconvertisseurpersonnalis,unvalidateurpersonnalis,unbeanmanagetunergledenavigation.Cesnotionsseronttudiesplusendtaildanslasuitedecechapitre,sectionNavigationentrelespages,ainsiquauchapitreConvertisseursetvalidateurs.

    convertisseurNombrePairPositif monConvertisseurNombrePairPositif premierProjetJSF.NombrePairPositifConverter

    Validation du mot de passe monValidateurDeMotDePasse premierProjetJSF.ValidatorPassword

    tirage premierProjetJSF.Tirage session maximum int 10 minimum int 0

    - 3 - ENI Editions - All rigths reserved

  • inscription /inscription.jsp succesInscription /confirmationInscription.jsp

    c.Typesderessourcesconfigurables

    Dansunsoucideclartdutextedans lerestede louvrage,nousconsidreronsquelesressourcesdesapplicationswebvoquessontconfiguresgrceununiquefichierdeconfigurationdesressources.

    LadclarationdunJavaBeanoudunbeanmanagdanslefichierdeconfigurationdesressourcessefaitlaidedelabalise.Celleciregroupeunensembledebalisesenfantsdontlenometlerlesontprcisscidessous:

    DfinitlaclattribueauJavaBean.Cettecl,valablesurlaporteprvuepourleJavaBean,pourratreutilisedanstouteslespageswebdelapplicationJSFpourrfrencerceJavaBeanenparticulier.

    Indique le nomde la classe partir de laquelle doit tre instanci le JavaBean.Cette classe doit bien sr trerendueaccessibleparlapplication.

    Prcise la porte dans laquelle le JavaBean est instanci. Les valeurs possibles pour ce paramtre sont none,request,sessionetapplication.LutilisationdelaportenonepermetdinstanciersystmatiquementunnouveauJavaBeanchaquefoisqueceluiciestrfrencdanslapage.Danscecasbiensr,leJavaBeannestrattachaucuneporteparticulire.

    SertdfinirlavaleurdinitialisationdunepropritparticulireduJavaBean.

    LadfinitiondunJavaBeanpeutcontenirplusieursdfinitionsdeproprits.

    Lavaleurdelapropritestdclaregrceunebaliseenfantnomme.Sontypeestindiquparlabaliseenfant,alorsque lenommmede lapropritestmentionnpar labaliseenfant.

    LefaitdedclarerlesJavaBeansauseindufichierdeconfigurationdesressourcesprsenteplusieursavantages.Notammentlapossibilitdefairelesdclarationsdansununiquefichierutilisableparlensembledelapplication,etlapossibilitdeprciserfacilementlavaleurdespropritssanscriredelignesdecodeJavasupplmentaires.

    Deplusamplesdtailsconcernant lusagedellmentsontdonnsdanslechapitreExploitationdescomposantsstandardsJSF.

    Commeprsentplusloindanscechapitre,lesapplicationsJSFsontconuespourfaciliterlaffichagedesmessagesderreurs survenant au cours des processus de validation ou de conversion des donnes. Les contenus de cesmessages, qui peuvent tre exposs linternautepar lintermdiairedesbalises ou,peuventtredfinisdemaniredynamiquecomptetenudelalogiquemtierdelapplication.Ilspeuventaussitredfinisdemanirestatiqueauseindunouplusieursfichiersdeproprits,dontlesrfrencessontmentionnesdanslefichierdeconfigurationdesressources.

    Javabeans

    Messagesetlabelspersonnaliss

    - 4 - ENI Editions - All rigths reserved

  • Ce mme type de fichier de proprits peut galement tre utilis pour spcifier un ensemble dtiquettes,utilisablesparexempleentantquelabelsdechampsdesaisiedeformulairesweb.

    Unfichierdepropritsestunsimplefichiertextedontlenompossdelextension.properties.Gnralementplacdanslesousrpertoiresrcdelapplicationweb,ilregroupeunensembledeligneschacunedellesreprsentantunmessageparticulier.Unmessagespcifiqueestindiqugrcesonidentifiantetsavaleur.Voiciunexemplede fichier de proprits dont le contenu peut tre utilis pour fournir des tiquettes aux champs de saisie deformulaires:

    name=Nom password=Mot de passe clientcode=Code client welcome=Bienvenue! submit=Validez login=Se connecter

    Pour que ce fichier de proprits soit utilisable par lapplication JSF, celleci doit en connatre la rfrence parlintermdiairedufichierdeconfigurationdesressources.Parexemple,lefichierdepropritsdontlecontenuestprsentcidessuspeuttredclardelafaonsuivante:

    ...

    premierProjetJSF.messages ...

    ...

    La dclaration se fait donc laide dune balise , ellemme contenue dans un lment,directementplacsous.Lefichierdepropritssenommemessages.propertiesetsetrouveplacdanslesousrpertoiresrc/premierProjetJSFdelapplicationweb.

    Pourinformation(cepointestabordplusendtailauchapitreInternationalisationduneapplicationweb),lusagedecesmessagesdansunepagewebdelapplicationpeutsefaireenchargeantlaressourcegrceunebalise,puisenutilisantlarfrencedecetteressourcepourafficherunetiquettedechampdesaisie.Lecodesourcesuivantillustrecettesituation:

    %@taglib uri="http://java.sun.com/jsf/html" prefix="h"% Usage dune ressource regroupant des messages personnaliss

    Malgr lintrt que peut prsenter cette forme dutilisation des messages personnaliss, lemploi de la balise dans chaque page susceptible dexploiter le fichier de proprits contenant les messages peutparatrefortcontraignant,enparticulier lorsque lenombredespagesconcernesest important.Pour levercettecontrainte,larfrenceauxfichiersdepropritspeutsefaireduneautremaniredanslefichierdeconfiguration

    - 5 - ENI Editions - All rigths reserved

  • desressources,commelemontrelecodesuivant:

    ...

    premierProjetJSF.messages

    mesMessagesPerso ...

    Lusageinitialdellmentatremplacparceluidelabalise, laquellesontassociesleslmentsenfantset.Lecontenudecedernierlmentprciselidentifiantdufichierdeproprits,telquilpourratreemploydanslesdiffrentespageswebdelapplicationsansquilsoitfaitusagedelabalise.

    LimplmentationJSFfournitunjeudevalidateurspardfaut,quipeuventtreutilisspourrpondreauxbesoinsles plus courants. Cependant, ces validateurs peuvent savrer insuffisants dans le cadre dapplicationsprofessionnelleso la logiquemtierpeut imposer lamiseenplacedecontrlespluspousss. JSFoffredonc lapossibilit de dfinir des validateurs personnaliss, par la cration de classes Java implmentant linterfacejavax.faces.validator.Validator.

    Lecaractrenonstandarddecetypederessource impliqueobligatoirementsadclarationauseindu fichierdeconfiguration des ressources de lapplication, grce llment directement plac sous :

    Validation du mot de passe monValidateurDeMotDePasse premierProjetJSF.ValidatorPassword ...

    longueurMinimale java.lang.Integer 5

    nombreCaracteresSpeciaux java.lang.Integer

    Lexemple cidessusprsente ladclarationdunvalidateurpersonnalisnommmonValidateurDeMotDePasse.Cetidentifiantestceluiquidoittreutilisdanslespagesdelapplicationwebpourexploiterlevalidateurenquestion.Laclassepartirdelaquelleestinstancilevalidateurestmentionnegrcellment.Sonnomdoittreindiquintgralement,packagecompris.Silevalidateurrequiertdesattributs,ceuxcisontprcissparleurnometleurtypegrceauxlments,et.

    Pour information,untelvalidateurpersonnalispeuttreconstitupourvrifierquelasaisiedunmotdepasserpond certains critres prcis, comme le respect dunnombrede caractresminimal, ainsique lobligationdeconteniruncertainnombredecaractresspciaux(%,#,$,etc.).

    LtudedesvalidateurspersonnalissestassuredemanireplusapprofondiedanslechapitreConvertisseursetvalidateursdecetouvrage.

    Pour les mmes raisons que celles voques propos des validateurs personnaliss, il est indispensable dedclarer les convertisseurs non standards dans le fichier de configuration des ressources, afin quils soientdisponibles dans lensemble de lapplication. Un convertisseur est une classe Java implmentant linterfacejavax.faces.convert.Converter,dont lesrfrencessontprcises laidedunebalise.Lecodeci

    Validateurspersonnaliss

    Convertisseurspersonnaliss

    - 6 - ENI Editions - All rigths reserved

  • dessousprsenteladclarationdunconvertisseurpersonnalis.

    Utilis pour sassurer quun nombre prcis peut tre Stock dans une proprit de JavaBean ne pouvant Accueillir quun nombre pair positif. convertisseurNombrePairPositif monConvertisseurNombrePairPositif premierProjetJSF.NombrePairPositifConverter

    L encore, les proprits principales du convertisseur personnalis se limitent son identifiant, tel quil seraexploitauseindespagesdelapplication,etlaclassepartirdelaquelleilestinstanci.Cesdeuxinformationssontdonnesrespectivementparlusagedesbaliseset.

    Lefichierdeconfigurationdesressourcesestaussiexploitparlarchitectedelapplicationpourmentionnerleflotdenavigation.LanavigationauseinduneapplicationJSFsedfinitlaidederglesdenavigationquispcifientcomment il est possible dallerdune pageweb vers une autre lorsque linternaute active unbouton ouun lienhypertexte.

    Concrtement,unergledenavigationconcerneunepagesourceenparticulier,etindiquelesdiffrentessituationsqui peuvent provoquer la navigation de cette page source vers dautres pages de lapplication. Ces diffrentessituations, nommes cas de navigation dans la terminologie JSF, sont le plus souvent caractrises par unidentifiant(chanedecaractres)etlenomdelapageciblecorrespondante.

    Voicicommentsedclareunergledenavigationsimple,danslefichierdeconfigurationdesressources:

    inscription /inscription.jsp succesInscription /confirmationInscription.jsp echecInscription /inscriptionImpossible.jsp

    Unergledenavigationspcifiquesedfinitdonclaidedunebalisedirectementplacesousllment.Lapagesourceconcerneparlargleestindiqueparlecontenudellment.Danslecasocetlmentnestpasprcis,larglesappliquetouteslespagesdelapplication.Siunechanegnriqueestutilisecommevaleurdecetlment(parexemple,/administration/*),seuleslespagesquiy correspondent sont concernes par la rgle de navigation (ici, toutes les pages situes dans le sousrpertoire/administrationdelapplication).

    Lescasdesituationsrpondant larglecorrespondentauxbalises,auxquellessont leplussouvent associes les balises et . La premire contient la chane de caractresidentifiantlecasdenavigation,alorsquelasecondementionnelapageciblecorrespondante.

    Lexemple prsent cidessus correspond une unique rgle de navigation concernant la page sourceinscription.jsp.CettergleestcomposededeuxcasdenavigationpermettantdepasserdelapagesourceverslapagecibleconfirmationInscription.jsplorsquelecasnommsuccesInscriptionestemployetdepasserverslapageinscriptionImpossible.jspenutilisantlecasechecInscription.

    Dautres dtails concernant la mise en uvre du modle de navigation JSF sont prsents plus loin dans cechapitre.

    Rglesdenavigation

    - 7 - ENI Editions - All rigths reserved

  • tapesrespecterpourlacrationduneapplicationJSF

    LedveloppementduneapplicationJSFimpliquelerespectdestapessuivantes:

    l crationduneinstancedelaFacesServlet

    l conception des pages web en utilisant les diffrents composants graphiques ainsi que les lments de labibliothqueCore

    l spcificationdelanavigationauseindelapplicationweb

    l dveloppementdesbeansncessairesaubonfonctionnementdelapplication.

    LundesintrtsdelatechnologieJavaServerFacesestquellepermetunerpartitiondestchesdedveloppemententretroistypesdintervenants.Enloccurrence:

    l Ledesignerweb,quiprendenchargelacrationdespagesJSP/JSFetlergonomiegnraledelapplication.SontravailestlargementfacilitparlemploidesbibliothquesdebalisesJSF.

    l Ledveloppeurdelapplication,dontlerleconsistecrerlesdiffrentsbeans.Celuiciestgalementamenmettreenplace lesventuels composantspersonnalissnongraphiques, telsque les convertisseurs, lesvalidateursetlescouteursdvnements.

    l Le concepteur de composants graphiques personnaliss. Naturellement, sa tche comprend galement lagestiondurendudecescomposantsgraphiques.

    1.CrationduneinstancedelaFacesServlet

    Toutes les applicationsweb bases sur JSF exploitent une instance de la FacesServlet.Celleci est utilise pourprendreenchargelesrequtesentrantes,lesanalyseretlesinsrerdanslecycledeviedelapplicationweb.Elleassuregalementlinitialisationdesmultiplesressourcesutilisesdanslapplication.

    Pour quune application Java Server Faces soit enmesure dexcuter une premire page JSP, le conteneur webinvoque linstance de FacesServlet. Cela a pour effet denclencher le cycle de vie de lapplication. Linstance enquestionestidentifieauniveaudelapplicationparunmappingquipeuttre:

    l unprfixe:parexemple,/faces/*

    l uneextension:parexemple,*.faces.

    CemappingestutilispourreprerlespagesJSPsusceptiblesdecontenirdeslmentsJavaServerFaces.

    LecodecidessousprsenteleslignescorrespondantladclarationdunmappingdelaFacesServlet,auseindudescripteurdedploiementduneapplicationweb:

    Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet /faces/*

    Danscetexemple,touteslespagesJSPsituesdanslesousrpertoirefacesdelapplicationwebsontsusceptiblesdecontenirdescomposantsJavaServerFaces.Ilsagitdoncdunmappingparprfixequipeut,parexemple,trefacilement exploit depuis la barre dadresse dun navigateur web :http://localhost:8080/monApplicationJSF/faces/index.jsp

    LexemplesuivantillustrelemappingdelaFacesServletparlextension*.faces:

    - 1 - ENI Editions - All rigths reserved

  • Faces Servlet *.faces

    LorsqueleconteneurwebrcupreunerequteadresseunepageJSPdont lenomseterminepar lextensionfaces,illatransmetlinstancedeFacesServlet.Cellecirecherchealorsdanslarborescencedelapplicationweblapage JSP correspondant au nommentionn, en remplaant lextension faces par lextension jsp. Par exemple, silutilisateur demande la ressource http://localhost:8080/monApplicationJSF/index.faces, cest la page index.jsp quiserarecherchepuispriseenchargeparlinstancedeFacesServlet.

    2.Crationdespagesweb

    Cettetapeconsisteraliserlesoprationssuivantes:

    l PositionnerlescomposantsJavaServerFacessurlapage.

    l Lierlescomposantsdespropritsdebeans,lorsquecestncessaire.

    l Rfrencer les ventuels convertisseurs, validateurs et couteurs auprs des composants graphiques quirequirentleurexistence.

    a.DclarationdesbibliothquesdebalisesJavaServerFaces

    Cesactions,thoriquementlachargedudesignerweb,imposentladclarationdesdeuxbibliothquesstandardsdebalisesJSFenenttedechaquepageweb.Eneffet,lexploitationdecomposantsgraphiquesJavaServerFacesdans les pages JSP ne peut se faire qu condition de savoir comment restituer lcran lapparence de cescomposants:labibliothqueHTMLfournitcetteinformation.Ilestgalementimpratifdesavoircommentgrerlesactions ralises auniveaude chaque composant graphique : cest le rlede labibliothqueCore. Il fautdoncsystmatiquementmentionner laccs ces deux bibliothques dans les pages JSP, grce aux directivestaglibsuivantes,dslorsquelespagesenquestionfontusagedesbalisesJSF.

    Lattributuridechacunedecesdirectivesrfrence laTLDdcrivant lesbalisescontenuesdans labibliothqueconcerne.Lattributprefix identifieleprfixeutilisdanslapageJSPpourfairerfrenceluneoulautredesbibliothques.Lenomdeceprfixepeuttrechoisilibrement.

    b.Positionnementdesbalisesviewetform

    TouslescomposantsJSFdunepagewebsontregroupsdansunarbredecomposants.DanslanomenclatureJavaServerFaces,cetarbreestnommvue.LaracinedecetarbreestuncomposantJSFissudelaclasseUIViewRoot,dont lareprsentationauseindespageswebsefaitgrceunebaliseview.CettebaliseestdclaredanslabibliothqueCore.Aumomentdudveloppementdespagesdelapplication,labaliseviewdoitimprativementtrepositionne en tant qulment parent de toute autre balise JSF, et en particulier de celles correspondant auxcomposantsgraphiques.

    Parailleurs,silespageswebprsententdescomposantspermettantauxutilisateursderaliserdessaisies(zonesde texte,zonesde listedroulantes,casescocher,boutonsdoptions),il est impratif dintercalerunebaliseform entre labaliseviewet lesdiffrentesbalises reprsentant lescomposantsdesaisie.Cettebaliseform estissuedelabibliothqueHTMLetpeutcomporterunattributiddontlerleconsisteidentifierdemanireuniqueleformulaireauseindelapageweb.

    VoicilecontenutypedunepageJSPexploitantJSF,avantinsertiondetoutcomposantautrequeviewetform.

    Formulaire dinscription

    - 2 - ENI Editions - All rigths reserved

  • c.Ajoutdecomposantsgraphiquesdansunepageweb

    Les lments principaux des pages web sont, bien entendu, les composants graphiques partir desquelslinternauteestameninteragiraveclapplicationweb.Cescomposants,dcritsplusendtaildanslasectionLescomposants graphiques de ce chapitre, sont des objets issus de classes drives de la classe parentejavax.faces.component.UIComponentBase. chacun deux est associe une balise spcifique de la bibliothqueHTML.LajoutdecomposantsgraphiquesJSFunepagewebconsistedoncsimplementpositionnerdanslecodesourcedecettepagelesbalisescorrespondantauxlmentsquelonsouhaitevisualiser.Ilfauttoutefoissassurerquecesbalisessontbieninsresentreleslments et,etquelesattributsimprativementrequissontbienrenseigns.

    Dansleformulairedesaisieutilispourillustrercechapitre,plusieurscomposantsgraphiquessontutiliss:

    l Leschampstextedesortie,quiserventafficherdesinformationstextuellessurlinterfaceweb.Cetypedecomposant graphique est utilis ici pour prsenter linvite situe en entte de formulaire, ainsi que lesdiffrents labels des champs de saisie. La balise utiliser pour les champs texte de sortie est.

    l Leschampsdesaisiedetypetexte:labalisequileurcorrespondest.

    l Les zones de liste droulantes choix unique, reprsentes par la balise. Cettebalisedisposedebalisesenfants,quicorrespondentauxlmentsdelistes.

    l Lesboutonsradio,gnrsgrceunebalise.cettebalisesontassociesuneouplusieursbalisesenfantspourreprsenterchacundeschoixpossibles.

    l Lesboutonsdecommande.Labalisequileurcorrespondest.

    l Lesmessages qui apparaissent lorsque la validation du formulaire choue, du fait dune contrainte nonrespecte(nombredecaractresinsuffisant,mauvaisformatdechane,etc.).Cesmessagessontinsrsdanslapagewebsouslaformedunebalise.

    LecodesourcedelapageJSPreprsentantleformulaireconcevoirestsitucidessous.TouslescomposantsJSFquiviennentdtrecitsysontmentionns: ilssontaccompagnsdattributsobligatoiresouoptionnels,dont lasignification sera explique plus loin dans ce chapitre. Notez que tous ces composants graphiques JSF sontintercalsavecducodeHTMLclassique,pourpermettrenotammentunaffichagesouslaformedetableau.

    Formulaire dinscription

    - 3 - ENI Editions - All rigths reserved

  • - 4 - ENI Editions - All rigths reserved

  • - 5 - ENI E