Vous êtes sur la page 1sur 57

http://www.labo-sun.

com
labosun@supinfo.com

FrameworkStruts
ModleMVC

Auteur:HlneSemereJouiCyril
Versionn0.1DfvrierYYYY
Nombredepages:57

EcoleSuprieuredInformatiquedeParis
23.rueChteauLandon75010PARIS

www.supinfo.com

FrameworkStrutsModleMVC

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

2/57

FrameworkStrutsModleMVC

3/57

Tabledesmatires
1.INTRODUCTION

.....................................................................................................................................

6
1.1.PRSENTATIONDELAPLATEFORMEJ2EE

.....................................................................................................

6
1.2.QUELQUESRAPPELS
..................................................................................................................................

6
1.2.1.DesServletsauxJSP

.....................................................................................................................

6
1.2.2.DanslaJSP:JavaBeansetTagLib

..............................................................................................

7
1.2.3.Dfinitionetintrtsdunframeworkdeprsentation

..................................................................

7
2.DESIGNPATTERNMVC

.......................................................................................................................

9
2.1.MODLEMVC(MODELVIEWCONTROLLER)

..............................................................................................

9
2.2.MODLEMVC2

....................................................................................................................................

10
3.QUESTCEQUESTRUTS?

................................................................................................................

11
3.1.PRSENTATION

........................................................................................................................................

11
3.2.ARCHITECTURE

.......................................................................................................................................

11
3.2.1.Cycledeviedunerequtehttp

...................................................................................................

11
3.2.2.Vuedensembleduneapplicationstruts

.....................................................................................

12
3.2.3.Packagesprincipaux

...................................................................................................................

12
3.2.4.Librairiesdpendantes

................................................................................................................

12
3.3.LESMODLES:MODLISATIONMTIER

........................................................................................................

13
3.3.1.Classemtier

...............................................................................................................................

13
3.3.2.ExempledecomposantModle

...................................................................................................

13
3.4.LESVUES

..............................................................................................................................................

14
3.4.1.LesTaglibStruts

........................................................................................................................

14
3.4.1.1.StrutsHtml
.........................................................................................................................................
15
......

3.4.1.2.StrutsLogic
............................................................................................................................................
15
..

3.4.1.3.StrutsBean
.........................................................................................................................................
16
......

3.4.1.4.StrutsNested
......................................................................................................................................
17
......

3.5.LECONTRLEUR

.....................................................................................................................................

17
3.5.1.ServletGnrique:ClassesdactionStruts

................................................................................

17
3.6.LINTERNATIONALISATION

.........................................................................................................................

19
3.6.1.LesfichiersProperties

...........................................................................................................

19
3.6.2.OutilsStruts

................................................................................................................................

19
3.7.LETRAITEMENTDESERREURS

....................................................................................................................

20
3.8.FICHIERDECONFIGURATION

......................................................................................................................

20
3.8.1.Assemblagedel'application

........................................................................................................

21
3.8.2.Datasources

................................................................................................................................

21
3.8.2.1.Exemple
...................................................................................................................................................
.
22
3.8.2.2.Utilisationdanslapplication
.................................................................................................................
23
..

3.8.3.FormBeans

..................................................................................................................................

23

3.8.3.1.Exemple
...................................................................................................................................................
.
24

3.8.4.Exceptions

...................................................................................................................................

24

3.8.4.1.Exemple
...................................................................................................................................................
.
24

3.8.5.GlobalForwards

.........................................................................................................................

25

3.8.5.1.Exemple
...................................................................................................................................................
.
25

3.8.6.Actionmappings

..........................................................................................................................

25

3.8.6.1.Exemple
...................................................................................................................................................
.
26

3.8.7.Controller

....................................................................................................................................

27

3.8.7.1.Exemple
...................................................................................................................................................
.
28

3.8.8.Messageresources

......................................................................................................................

28
http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

4/57

3.8.8.1.Exemple
...................................................................................................................................................
.
28

3.8.9.Plugin

........................................................................................................................................

28

3.8.9.1.Exemple
...................................................................................................................................................
.
29

3.9.INTGRATIONAVECLAPPLICATIONWEB

.....................................................................................................

29
4.LESTILES

...............................................................................................................................................

31
4.1.PRSENTATION

........................................................................................................................................

31
4.2.ARCHITECTURE

.......................................................................................................................................

31
4.3.INSTALLATION

........................................................................................................................................

32
4.4.FICHIERDECONFIGURATION

......................................................................................................................

32
4.4.1.Baliseracine

...............................................................................................................................

32
4.4.2.Balisedefinition

..........................................................................................................................

33
4.4.3.Baliseput

....................................................................................................................................

33
4.4.4.BaliseputList

...............................................................................................................................

34
4.4.5.Baliseitem

...................................................................................................................................

34
4.4.6.Balisebean

..................................................................................................................................

35
4.4.7.Balisesetproperty

......................................................................................................................

35
4.5.LAYOUTS

...............................................................................................................................................

36
4.5.1.Lefichierdestructure

.................................................................................................................

36
4.6.TILES

....................................................................................................................................................

38
4.7.EXEMPLEDARCHITECTUREDEDFINITIONS

..................................................................................................

38
5.VALIDATOR&FORMULAIRES

.......................................................................................................

40
5.1.PRSENTATIONETARCHITECTURE

...............................................................................................................

40
5.2.FICHIERSDECONFIGURATION

.....................................................................................................................

40
5.2.1.Danslefichierstrutsconfig.xml

.................................................................................................

40
5.2.2.Lefichiervalidatorrules.xml
:...................................................................................................


41
5.2.3.Lefichiervalidation.xml
:..........................................................................................................


42
5.3.DYNAFORMS

..........................................................................................................................................

46
5.4.RSUMDELACONFIGURATIONDESVALIDATORS
........................................................................................


49
6.INTGRATIONAVECXDOCLET

.....................................................................................................

50
6.1.STRUTSCONFIG.XML

................................................................................................................................

50
6.1.1.Tags@Struts

...............................................................................................................................

50
6.1.2.Exemples

.....................................................................................................................................

52
6.1.3.IntgrationavecAnt

....................................................................................................................

53
7.CASCONCRET(ARCHITECTURE)

..................................................................................................

55
7.1.PRSENTATION

........................................................................................................................................

55
7.2.ARCHITECTURE

.......................................................................................................................................

55
7.3.COUCHEMTIER

......................................................................................................................................

55
7.3.1.Couchedaccsauxdonnes(DAO)

...........................................................................................

55
7.3.2.Coucheservice

............................................................................................................................

55
7.4.COUCHEAPPLICATION

..............................................................................................................................

55
7.4.1.Action

..........................................................................................................................................

55
7.4.1.1.ActionForm
..................................................................................................................................
55
............

7.4.2.Forwards

.....................................................................................................................................

56
7.4.3.Exceptions

...................................................................................................................................

56
7.5.COUCHEPRSENTATION

............................................................................................................................

56
7.5.1.Tiles

.............................................................................................................................................

56
7.5.1.1.Dfinitions
...........................................................................................................................................
56
.....

7.5.1.2.Jsp(layoutsettiles)
...........................................................................................................
56
......................

7.5.2.Formulaires

.................................................................................................................................

56
http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

5/57

7.5.3.Messagesderreur(MessageApplication)

...................................................................................

56
8.LAVENIRDESTRUTS

........................................................................................................................

57
8.1.INTGRATIONAVECJSTL

........................................................................................................................

57
8.2.INTGRATIONAVECJSF

...........................................................................................................................

57
8.3.ADOPTIONGNRALISEDESTRUTS

...........................................................................................................

57

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

6/57

1.Introduction
1.1.PrsentationdelaplateformeJ2EE
J2EE(Java2EnterpriseEdition)estunensembled'APIsvisantledveloppementd'applications
orientesentreprise.
Parmis ces APIs, certaines existent dj dans la version "standard" de Java (Java 2 Standart
Edition),tandisquedautresnesontprsentesquedanslaversionorienteentreprise.Ainsiona
lesAPIsEJBs(EnterpriseJavaBeans)ouJMS(JavaMessageService)quisontspcifiquesaujdk
J2EE,linversedesAPIsJDBCouRMIquiexistentaussidanslejdkJ2SE.
LaplateformeJ2EEprsenteunesolutionoptimalepourdvelopperdesapplicationsrobustes,
scurisesetvolutives.Eneffet,choisircettetechnologie,cestsuivreuncertainnombrede
rgles.Lebutesteneffetdespareraumaximumlapplicationencouches.
Ce que lon va justement dtailler dans ce cours est de quelle manire on va dcouper les
diffrentescouches,quelmodleutiliser,etavecquelsoutilslefaire.

1.2.Quelquesrappels
Avantdecommencercecours,quelquesrappelssurlesJSP/Servlets,lesJavaBeansainsique
lesTagLib:

1.2.1.DesServletsauxJSP
LorsquelonvadvelopperunsiteWeblaidedestechnologiesJ2EE,onpeutdifficilement
passerctdesServlets.
Une Servlet est une classe java chargeune seule et premire fois par le moteur de Servlet
(exemple:Tomcat)lorsdesonpremierappel. Parlasuite,onferatoujoursappellamme
instancedecetteServlet.
ChaquefoisquelonvacreruneServlet,oncrerauneclasseimplmentantlinterfaceServletet
doncredfinirquelquesmthodesdontlesmthodes

publicvoidinit(ServletConfigcfg)quiseraappelelorsdupremierappeldelaServlet,
lorsdesoninstanciation.
publicvoidservice(ServletRequestreq,ServletResponseres)quiseraappelechaque
appeldelaServletinstancie.
publicvoiddestroy()quiseraappelejusteavantladestructiondelaServlet.

Ainsi,cestdanslamthodeservice() quevasetrouverlecodejavadontlersultat,envoyau
browser,permettralaffichagesurunepageWeb.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

7/57

Leproblmeestquesilonsuitceprincipe,lapartietraitementdenotrecodeestmlelapartie
prsentationalorsque,commeillatprcisprcdemment,lesbasesmmeduneapplication
utilisantlestechnologiesJ2EEestledcoupageencouches.
Poursparerclairementlapartietraitementdelapartieprsentationdenotreapplication,onva
doncutiliserlespagesJSP.
UnepageJSPressembleunepageHTMLpouvantcontenirdesbalisesJSPet/ouducodeJava.
Ellevadoncnouspermettredafficherlesrsultatsdestraitementseffectusenarrireplandans
desclassesJava.Danscecas,lapageJSPvatreconvertieenServletpuisleprocessusvatrele
mmequepouruneServletclassique.

1.2.2.DanslaJSP:JavaBeansetTagLib
DansnotrepageJSP,onvapouvoirutiliserdiffrentscomposantspourafficherlesdiffrents
rsultatsdestraitementseffectusdanslescouchesinfrieures.
LesJavaBeanssontdescomposantsquivontpermettredinstancieretmanipulerdiffrentsobjets
Java(portedelapage,derequte,desessionoudelapplication)laidedebalisesJSP.
Lavantageestquelorsquilvarencontrerunebalise,leserveurvaautomatiquementdtectersi
linstancedelobjetexistedjounon.Sicestlecas,ilreprendlinstanceexistantesinonilen
creunenouvelle.Celavapermettredutiliserunmmeobjetsurplusieurspages,voiretoutle
longdelapplication.
LesTagLibs,toutcommelesJavaBeanssontdescomposantsquivontpermettredinstancieret
manipulerdiffrentsobjetsJavalaidedebalisesJSP.Cependant,ilsnepourrontavoirquune
portelimitelapagecourante.Onnepourradoncpasrutiliserunemmeinstancedunobjet
surplusieurspages.Pourchaquepagedelapplication,onaurauneinstancediffrente.
LesTagLibs,balisespersonnalises,vontpermettre,entreautresdecrersespropresbalisesdela
plussimplelapluscomplexeetainsidafficherlesrsultatsdesdiffrentstraitementsen
quelqueslignes.
Pourplusdinformationssurcescomposants,nhsitezpasconsulterlecourssurles
Servlets/JSP.

1.2.3.Dfinitionetintrtsdunframeworkdeprsentation
OnadoncpuvoirquelesJSPoffrentunesolutionidalepourafficherlesrsultatsdes
traitementseffectusenamont.Ilsreprsententlapartieprsentationdenotreapplication.Ona
aussivuquelonpouvaitutiliserlesJavaBeansoulesTagLibspourviterdavoirducodeJava
dansnospagesJSP.
Cependant,lobjectifpremierdundveloppeurestdviterderefairechaquefoislamme
chose.
Pourcela,onvautiliserunframeworkquiimposeunemthodededveloppementsimpleet
efficace.
http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

8/57

Onvaalorsobteniruneapplicationrespectantlesobjectifsderutilisabilitquevisela
programmationorienteobjet.
Concrtement,unframeworkestlesqueletteduneapplication.Celavapermettrelacration
rapidedactions/vnementsclassiques,parexemple,unformulaire(tenantcomptedelascurit,
delavalidit,etc).
Quelsquesoientlesoutilsutilissdanslescouchesinfrieures,leframeworkdeprsentation
choisiestcompltementindpendant.Ilnouspermetdoncdatteindrelobjectifattendu;des
couchescompltementindpendanteslesunesdesautres.Onpeutalorschangerlunedesdelles
sansmodifierlesautres.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

9/57

2.DesignpatternMVC
2.1.ModleMVC(ModelViewController)

LepatternModleVueContrleurestlundesmodleslesplusconnusetleplusclbredetous.
IlattoutdabordlaborparXeroxlorsdeleurpremiersystmefentretplusparticulirement
pourgrerlesinteractionsaveclutilisateur.
LeproblmequersoutlemodleMVCestceluidelasimplificationdetroisgrandesfonctions
communesdenombreusesapplications:

Lamaintenancedesdonnesdansunstockagedebackendousurunsystmedistant.

Laconstructiondelacoucheprsentationdestinelutilisateurfinal.

La gestion de la logique conditionnelle qui dcide des crans qui sont prsents
lutilisateur,decequisepasselorsquuneerreursurvientetdelafaonetdumoment
exactsolessystmesdistantssontmisjour.

Ilestdoncpossibledecombinerlensembledecesmodulesetdavoiraufinalunsystmequi
fonctionne.Cependantlesproblmesseposentlorsquevoussouhaitezmaintenirlecode.Eneffet
danslecasdesJSP,lesconcepteursHTMLchargsdulookendfeeletceuxquimaintiennentle
codedetraitementsontdiffrents.
MVCtraiteceproblmeensparantlecodeentroispartiesdistinctes:

LescomposantsModle,quimaintiennentlesdonnesdanslestockage.

LescomposantsVue,quiconstituentlacoucheprsentationdestinelutilisateurfinal.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

10/57

LescomposantsContrleur,quigrentlalogiqueconditionnelle.Cestellequidcidedes
cransquisontprsentslutilisateur,quigreleserreursetlamisejourdessystmes
distants.

MVCsimplifiedonclamaintenancedelapplicationetempchentlestroistypesdelogiquesdese
mlanger.Ilpermetgalementdemasquerlesdtailsdimplmentationdechaquedomaineaux
deuxautresetrduitainsilesdpendancesdecodageentreeux.Decefait,MVCpermetdedfinir
une frontire naturelle entre lesconcepteurs web qui maintiennent le code html et la couche
prsentation.
Undesavantagesconsidrabledansledveloppementdapplicationweb(jsp,servlet)estquele
modleMVCfacilitegrandementlagestiondesexceptions(carellessonttoutesgresviale
contrleur).
Dautresavantagessappliquenttouteslesformesdetraitementconditionnel.Voiciquelques
exemples:

SidiffrentesVuessontncessairesenfonctiondesdonnesquisontextraitesdunebase
dedonnesoudunsystmedistant,leContrleurpeutdciderdelapageprsenter.

Sivotreapplicationchangeenfonctiondelheureet/ouladatedelajourne,leContrleur
peutgrercelafacilement.

Si un processus de saisie de donnes ncessite plusieurs pages, dont certaines sont


facultatives.

CependantlepatternMVCestclairementdfinit,pourquoiparletonparfoisdeMVC1,MVC2?

2.2.ModleMVC2
LemodleMVC2nariendeplusquelemodleMVC.LoriginedecenomvientdufaitqueSun,
lorsdelasortiedesspcificationsJSP,indiquaitdansunesectionPageAccessModel(ou
modledaccsJSP)unmodle1etunmodle2.
Lemodle1dcrivaitletraitementJSPdelafaondontiltaitcourammentutilislpoque.
C'estdirelarequteHTTPestdirectementenvoyeversunfichierjsp.Toutletraitementse
faisaitalorsdanslapageJSP,etlarponsevenaitdecemmefichier.
Lemodle2taitbiendiffrent.Ilindiquaitquectaitlaservletquidevaitrecevoirlarequte
HTTP. Celleci pouvait alors effectuer les tches ncessaires au traitement de cette requte
(mmoriserdesinformationsdanslebeantransmis)ettransmettrelesinformationsunepagejsp
afinquecellecignrelarponseHTTP.
AucunnomdetypeMVCnintervientdanscesmodles,cependantlemodle2seninspire
troitement.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

11/57

3.QuestcequeStruts?
3.1.Prsentation
Strutsestunframeworkpourlesapplicationsweb.
Un framework est une structure permettant de soutenir ou de contenir quelque chose, en
particulierunsquelettepouvantservirdebaseuneconstruction(cf.dictionnaireanglais).
Struts est en une collection de programmes Java conue pour vous aider construire des
applicationsrobustesengagnantdutemps.Ilfournitlacharpenteetlegrosuvredebase.Ilvous
restealorsplusquvousconsacrerlagencementetladcorationdespices!
Outre que Struts vous permet de vous faire gagner du temps, il vous permet de voir des
applicationscomplexescommeunesuitedecomposantsdebase:Vues,Actions,Modles.
Ilvousfournitunensembledebonnespratiquesetunebasesolidementrflchie.Deplusrienne
sertderinventerlaroue,Strutsvouspermetdepartirdunebasesolide,idalpourlesdbutants!
Cependant Struts est principalement vou tre utilis pour les applications web mais est
compltement conforme la spcification Servlet (actuellement 2.3) qui fait partie de la
spcificationpluslargedeJ2EE.
LundesautresavantagesetqueStrutsestunesolutionOpenSourcedontungrandnombrede
dveloppeurscontribuentactivement.

3.2.Architecture
3.2.1.Cycledeviedunerequtehttp
Navigateur
del utilisateur

Composant
Contr leur

Composant
Mod le

4
5

Composant
Vue

Stockage
Persistant
ousyst me
distant

1. Leclientenvoieunerequtelapplication
2. LecomposantContrleurreoitlarequte.Ilcommencealorsprendredesdcisionssur
lafaondecontinuer,enfonctiondesrglesdegestiondelapplication.
3. LescomposantsModleagissentaveclesstockagesdedonnespersistant.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

12/57

4. SuivantlesdonnesretournesparleModle,lecontrleurdterminelaVueutiliser
pourlaffichagedesdonnesetluitransfertlesdonnes.
5. LecomposantVuechoisignrelarponselademandeduclient.

3.2.2.Vuedensembleduneapplicationstruts
TroispartiesprincipalesconstituentuneapplicationutilisantStruts:

LalibrairieStrutsetsesdpendances

LesclassesJava:actions,formulaires,exceptions

Lefichierdeconfigurationstrutsconfig.xml:assemblagedelapplication(liaisonsurl,
classes,formulaires,sourcesdedonnes)

3.2.3.Packagesprincipaux
Voiciunedescriptiongnraledesprincipauxpackagesdelapplication:

org.apache.struts:packageroot

org.apache.struts.action:packagenoyaudesclassesdebasniveaupourlesContrleur

org.apache.struts.config: packagereprsentantleslmentsde configuration (quelon


retrouvegalementdansstrutsconfig.xml)

org.apache.struts.taglib:packagerootdelensembledestaglibStruts

org.apache.struts.taglib.bean:packagequiregroupelesclassesdetagdelalibrairieBean

org.apache.struts.taglib.html:packagequiregroupelesclassesdetagdelalibrairieHtml

org.apache.struts.taglib.logic:packagequiregroupelesclassesdetagdelalibrairieLogic

org.apache.struts.taglib.nested: package qui regroupe les classes de tag de la librairie


Nested

org.apache.struts.tiles:packageduplugintiles

org.apache.struts.upload:packagedesclassessimplifiantluploadavecStruts

org.apache.struts.util:packagedesclassesutilitairesdeStruts

org.apache.struts.validator:packagedupluginvalidator

3.2.4.Librairiesdpendantes
Voicilensembledeslibrairiesquilfautintgrervotreapplicationwebafindepouvoirutiliser
Struts:

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

13/57

struts.jar:jarcontenantleframeworkStruts(Actions,forms)

commonsbeanutils.jar;outilspourlutilisationdesBeans

commonsdigester.jar:mappingxml>objetjava

commonsvalidator.jar:utilispourlagestiondelavalidation(Validatorplugin)

commonslogging.jar:permetdefairedeslogsdansvosapplications

commonsfileupload.jar:utilispourfacilitluploaddefichier

struts(bean/logic/nested/html).tld:fichierdedescriptiondeslibrairiesdetaglib
Struts

3.3.Lesmodles:modlisationmtier
Un composant modle reprsente gnralement un objet mtier ou un systme de backend
physique.Parexemple,unsystmequipermetdesutilisateursdeseconnecteretdegrerdes
informationspersonnellespeutcomprendreuncomposantModlequireprsenteunUtilisateur.

3.3.1.Classemtier
Laclassemtierfournitdesmthodesquipermettentdaccderauxinformationslilobjet(par
exemplepourlutilisateur:nom,prnom,motdepasse).Cependantlesconceptsdebasesont
lessuivants:

Lesclassesmodlesserventaccderauxinformationsmmorisesdansdesbasesde
donnesousurdessystmesdistantspourlesprsenterauxutilisateurs.

Ellesdoiventtreconuesdemanirecacherlesdtailsdimplmentationdelaccs
linformation(utilisationdinterface).

3.3.2.ExempledecomposantModle
Dans le cas dune application construite sur un conteneur de servlet (Tomcat), le composant
ModlepeutselimiterunsimplebeanJavafournissantunevuemtierunelogiqueJDBCqui
maintientlesinformationsdanslabasededonnes.Lerestedelapplicationinteragitavecle
ModlepourlireetcrirelesinformationsetseulleModleinteragitaveclabasededonnes.
DansuneapplicationconstruiteavecunsystmefrontalutilisantJSPetunsystmedorsalauquel
onaccdeviadesWebServices,lescomposantsModlesserventfournirunereprsentation
mtier du systme dorsal. Le reste de lapplication continue accder aux informations par
lintermdiaireduModle,maisseulceluiciaccdeauxWebServices.
CelaestdemmeavecunsystmeutilisantlesEJB(cf.EntrepriseJavaBean).LeModleassure
laccsauxEJB.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

14/57

Celapermetdoncunegrandeflexibilitpourlvolutiondelapplicationmaisgalementune
extrmepuissanceetsouplessepourlesdveloppeurs.

3.4.Lesvues
DanslepatternMVC,lecomposantVueseconcernesuruneseulechose:lacrationdelacouche
prsentationquevoitlutilisateur.Cecomposantnedoitcontenirquunstrictminimumdelogique
mtieretdanalysecomplexe.
LescomposantsVuessontleplussouventceuxassocislarponsedelarequteHTTP.Dansle
casdeStrutscesontlesJSPquireprsenteleplussouventcettevue.Eneffet,cesfichiersgnrent
leHTMLquiseraenvoyauclient.
UndesavantagesdesJSPestquelonpeuttoutaussibienintgrerduHTML,desbalisesJSPou
encoredes scriptlets Javadansunmmefichier.Cependantlinconvnientestquelatchedes
concepteurs web en est alors complexifie pour le maintient du look and feel! De plus un
dveloppeurJavaesttropfacilementattirparlatendanceabuserdes scriplets etinclurela
logiquemtier(ouinstructionsconditionnelles)directementdanslaJSP!
AveclepatternMVC,ceproblmeestrsolutcarilisolelemodle,lestraitementsetla/lesvues.
De plus Struts fournit un ensemble de balises JSP personnalises servant construire les
composantsdelaVue.Onretrouvedesbalisestelsque:<html:text>,<logic:iterate>quidonnent
auxdveloppeursJavaetauxconcepteursweblapossibilitdeconstruiredesfonctionnalitssans
utiliserdescripletJava.

3.4.1.LesTaglibStruts
LesbalisespersonnalisesduframeworkStrutsconstituentunepartimportante.Eneffet,elle
simplifiegrandementledveloppementdepageJSP(composantVue)etlesrelientauxautres
composants.
Ces balises vous permettront de dbugger plus rapidement vos applications car leur nom et
descriptionsontunavantageconsidrablecontrairementauxscriplets.
LesbalisesStrutssontregroupesenquatregroupes:

Html:grelensembledesbaliseshtml(champstexte,file)

Logic:grelalogiquedevosVue(itration,condition)

Bean:grelaccsaux bean (etleurproprits)devotreapplication(page,request,


session)

Nested:regroupehtml,logic,beanenajoutantunearborescencepourlaccsaubean

Touslesdescripteursdecesbibliothquessontinclusdansleframeworksouslenomde:struts
<<type>>.tld.Parexemple:strutshtml.tldreprsenteledescripteurdelabibliothquehtml.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

15/57

3.4.1.1.StrutsHtml
Cette bibliothque est principalement utilise pour la gestion des formulaires dans Struts.
CependantellecouvrelamajoritdesbalisesdebaseduHTML.
Voiciletableaurcapitulatifdestagsdisponibles:
TagName
base
button
cancel
checkbox
errors
file
form
frame
hidden
html
image
img

Description

AffichelabaliseHTML<Base>
Afficheunbouton
Afficheunboutondecancel
Afficheunecheckbox
Affichelensembledeserrorsdetraitementdelarequte(champsnonvalides)
Afficheunchampfichier
Dfinitunebalise<form>
AfficheuneframeHTML
Afficheunchampcach
Afficheuntaghtml
Afficheunchampimage(formulaire)
Afficheunebaliseimg
Affichelecontenujavascriptpermettantdeffectuerunevalidationctclientdun
javascript
formulaire(utilisationaveclepluginValidator)
link
AfficheuneancreHTML
messages
Affichelensembledesmessagesaccumulslorsdelexcutiondelarequte
multibox
Afficheunecheckbox
option
AfficheunchampOption
options
AfficheunecollectiondoptionsdansuntagSelect
optionsCollection AfficheunecollectiondoptionsdansuntagSelect
password
Afficheunchampmotdepasse
radio
Afficheunboutonradio
reset
Afficheunboutondereset
rewrite
Afficheuneurlliaucontextencours
select
AfficheunchampSelect
submit
Afficheunboutonenvoyer
text
Afficheunchamptexte
textarea
Afficheunchamptextarea(zonedetexte)
xhtml
AfficheuntagXHTML

3.4.1.2.StrutsLogic
Cettebibliothquecontientunensembledetagsutiliss dans la gestion de condition, itration
suivantdesobjets,etgestiondefluxdelapplication.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

16/57

TagName
empty

Description
Evaluelecontenuducorpsdelabalisesilavariableestnullouvide.
Evaluesilecontenuducorpsdelabalisesilavariableestgalelavaleur
equal
spcifie.
forward
TransfertlecontrlelapagespcifiedanslentreActionForward.
Evaluelecontenuducorpsdelabalisesilavariableestplusgrandeougalela
greaterEqual
valeurspcifie.
Evaluelecontenuducorpsdelabalisesilavariableeststrictementplusgrande
greaterThan
quelavaleurspcifie.
iterate
Rptelecontenuducorpsdelabalisesuivantlacollectionspcifie.
Evaluelecontenuducorpsdelabalisesilavariableestinfrieureougalela
lessEqual
valeurspcifie.
Evaluelecontenuducorpsdelabalisesilavariableeststrictementinfrieurela
lessThan
valeurspcifie.
Evaluelecontenuducorpsdelabalisesilavaleurspcifieestunesouschaine
match
appropriedelavariable.
Gnrelecontenuducorpsdelabaliselemessagespcifiquenestpasprsent
messagesNotPresent
danslarequte.
Gnrelecontenuducorpsdelabaliselemessagespcifiqueestprsentdansla
messagesPresent
requte.
Evaluelecontenuducorpsdelabalisesilavariableestninullounivideniune
notEmpty
collectionvide(testeparisEmpty()delinterfaceCollection).
Evaluesilecontenuducorpsdelabalisesilavariablenestpasgalelavaleur
notEqual
spcifie.
Evaluelecontenuducorpsdelabalisesilavaleurspcifienestpasunesous
notMatch
chaineappropriedelavariable.
Gnrelecontenuducorpsdelabaliselavaleurspcifiquenestpasprsentedans
notPresent
larequte.
Gnrelecontenuducorpsdelabaliselavaleurspcifiqueestprsentedansla
present
requte.
redirect
EcritunheaderHTTPRedirectdanslarponse.

3.4.1.3.StrutsBean
Cettebibliothqueestutilisepourlireetcrirelesdonnescontenuesdansdesbeans,voirmme
lesbeaneuxmmes,ouencoredfinirdenouveauxbeans.
TagName
Description
cookie Dfinitunevariabledescriptbasesurlavaleurducookiespcifi.
define Dfinitunevariabledescriptbasesurlavaleurdubeanspcifi.
header Dfinitunevariabledescriptbasesurlavaleurduheaderspcifi.
Chargelarponsedepuisuneapplicationdynamiqueetinclutcellecidansunbean(type
include
String).
http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

17/57

TagName
Description
message Affichelecontenudunmessageinternationnalis)danslarponse.
page Exposeunspcifiqueobjetducontextdelapageunbean.
parameter Dfinitunevariabledescriptbasesurlavaleurduparamtre(requte)spcifi.
resource Chargeuneressourcedemandeetinclutcellecidansunbean(typeStringouInputStream).
size
DfinitunevariabledescriptbasesurlatailleduneCollectionouMapspcifi.
struts Exposelobjetdeconfigurationstrutsunbean.
write Affichelecontenudunepropritdunbeandanslapage(out).

3.4.1.4.StrutsNested
Cette bibliothque est unpeu spcialecar elleregroupe lestroisprcdentes. Cependant elle
permetdestructurervostagssuivantlarborescencedevosbeans.
Voicilestroistagssupplmentaires:
TagName
Description
nest
Dfinitunnouveauniveauquelestagfilspourrontutiliser.
writeNesting Dfinitunevariabledescriptbasesurleniveaucourant.
root
Dmarreuneracinedunehirarchie.

3.5.Lecontrleur
Cesontlescomposantsquimnentlaction!Chaquefoisquunutilisateursoumetunformulaire,
cestlecontrleurquiletraite.Silutilisateurdemandeuneautrepage,cestluiquidcidedece
quiseraaffich.CestgalementluiquicollectelesinformationsauprsdescomposantsModle
pourquelescomposantsVuesaientlesinformationsafficher.
VoiciunrcapitulatifdesactionseffectuesparleContrleur:

Validerlesdonnessaisiesparlutilisateur.

Prendre des dcisions concernant les composants Modle auxquels il faut accder ou
mettrejour.

RcuprerlesdonnespourlecomposantVue.

Prendredesdcisionsconcernantlafaondetraitertelleoutelleerreursurvenuedurantle
traitementdelarponse

DciderdelaVueafficher

3.5.1.ServletGnrique:ClassesdactionStruts
Lecontrleurestimplmentendeuxparties:

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

Java:classedaction

Struts:configurationxml

18/57

Lactionreoitlessaisiesutilisateur,coordonnelaccsaustockagepersistantousystmesdistants
metenuvrelalogiquedelapplicationetdcideducomposantVuequiseraaffichensuite
lutilisateur.
Uneclassedactiondoit:

Etendrelaclasse:org.apache.struts.action.Actionouuneclassedrive

Surchargerlamthode:publicActionForwardexecute()afindeffectuerletraitement
spcifiquelaction

NecomporteraucunlienavecunepageJSPdirectement(celienesteffectudansle
fichierdeconfiguration)

Cetteclassedactionpeuttretrssimplecommetrscomplexe.Parexemplevouspouvezcrer
un lien qui dirige vers une classe daction affichant un formulaire de cration dun nouveau
compteutilisateur.Laclassedactionsapparenteracela:
packagecom.labosun.lessons.struts.action;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
publicclassNewAccountActionextendsAction{
publicActionForwardexecute(ActionMappingmappings,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
returnmappings.findForward("newUserForm");
}
}

Aucunerfrenceaufichierjspnestfaite.Laconfigurationdecetteactionressemblera(cf.3.8)
:
<actionpath="/addUser"
type="com.labosun.struts.action.NewAccountAction"
input="/home.jsp"
scope="request">
<forwardname="home"path="/adduser.jsp"></forward>
</action>

Cependantlamajoritdesactionsestbienpluscomplexequecelleci.Ellesfontdestraitements
daccsauxdonnes,misejour
VoicilensembledesmthodeslesplusutilisesdelaclasseAction:

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

19/57

addErrors(javax.servlet.http.HttpServletRequestrequest,ActionMessageserrors):ajoute
une erreur la requte. Lensemble des erreurs ajoutes pourra tre affich par
lintermdiairedelabalise:<html:errors/>

addMessages(javax.servlet.http.HttpServletRequest request,ActionMessages messages):


ajouteunmessagelarequte.Lensembledesmessagesajoutspourratreaffichpar
lintermdiairedelabalise:<html:messages/>

execute(ActionMapping

mapping,

ActionForm

form,
javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse
response):mthodesurchargerafindeffectuerletraitementspcifiquepourlactionen
cours. Retourne unobjet de typeActionForwardindiquantlavue (ouautreaction)
laquelleonsouhaitepasserlarequte.

setLocale(javax.servlet.http.HttpServletRequest request,java.util.Locale locale): permet


dercuprerlalocaledelutilisateur(utilepoursavoirlepays/languedeceluici).

3.6.Linternationalisation
Strutsmetdispositionunensembledoutilspermettantdegrerfacilementlinternationalisation
dansvosapplicationsweb.
Vouspouveztoutaussibienutiliserlinternationalisationpourgrerlesmessagesderreurdevos
formulairesquepourvosmessagesdunepageJSP.
DansStruts,onparledebundledemessagespourindiquerungroupedemessagedynamique.Un
bundleestreprsentparunfichierProperties(bienconnudanslemondeJava).

3.6.1.LesfichiersProperties
QuestcequunfichierProperties?Enjava,ilexisteuneclasse:java.util.Propertiesquipermet
delireunfichierstandardistrssimplement(unfichierproperties).
Cefichierprendgnralementlextension.propertiesetregroupedesgroupesbinaires(cl=>
valeur).Pourchaquevaleurdynamiqueonassocieunecluniqueindpendantedulangagecequi
permetderelierplusieursvaleursunemmeclselonlelangageencours.
VoiciunexempledefichierProperties:
cle1=valeur1
cle2=valeur2
cle3=valeur3

3.6.2.OutilsStruts
Struts utilise un bundle par dfaut qui est li au fichier: ApplicationRessources.properties.
Cependantvouspouveztoutfaitpersonnaliserlaccscefichierdanslefichierdeconfiguration

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

20/57

deStruts.Vouspouvezgalementscindervospropritsenplusieursfichiersetdoncplusieurs
bundle.
LutilisationprincipaleseferadansvosJSPparlintermdiairedelabalise:
<bean:messagekey=cle0/>
Ou
<bean:messagekey=cle0bundle=nomDuBundle/>

Vouspouvezgalementrcuprerlavaleurdunmessagedirectementdansuneaction:
getResources(request).getMessage("cle");

3.7.Letraitementdeserreurs
Strutsvous permetde centraliserla gestiondes exceptions liesau Contrleur.Vous pouvez
dfinirdesliaisonsentreletypedexceptionetunepagejsp(pourafficherunmessage).Vous
pouvez galement ajouter une classe handler qui est automatiquement appele lorsquune
exceptionestjete.
Voiciunschmareprsentantlefonctionnementenglobalit:
1

ClassesAction
(Contr leur)

<<Type>>Exception

Fichier
Config.

Classe Handler
h ritantde
ExceptionHandler

JSPpageerreur

1. Uneclassedactionjetteuneexceptiondetype:TypeException
2. Strutsdtecteuneconfigurationpourcetteexceptiondanslefichierdeconfiguration
3. Suivantcetteconfiguration,StrutsappellelaclasseHandlerpourcetteexception
4. Strutsredirigeverslapagejspderreurconfigure

3.8.Fichierdeconfiguration
LefichierdeconfigurationestlepointcentraldetouteapplicationStruts.Eneffet,ilregroupe
lensembledesobjetsetdeleurconfiguration.Onpeutconnatrelensembledelalogiquede
lapplication (navigation) avec ce fichier. Malgr la lourdeur dutilisation de xml dans une
applicationwebcomplexe(suivantlenombredefonctionnalits),lesoutilsquionttmisen
uvrepouraiderledveloppeurdansleparamtragedecefichiersontmaintenantstableset
robustes.
http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

21/57

3.8.1.Assemblagedel'application
Lefichierdeconfiguration:strutsconfig.xml(leplussouventnommainsi)estchargdindiquer
Strutsquelssontlesformulaires,lesactionsdisponiblesetpermetgalementdajouteruncertain
nombredemodlesenfichablesaupackageStrutsdebase.
NoustudieronsicilensembledesbalisesdebasesutilisesdansuneapplicationStrutsgrcela
DTD

fournit

par

Struts

ladresse

suivante:
http://jakarta.apache.org/struts/dtds/struts_config_1_2.dtd(DTDdelaversion1.2).
Lapremirebalisequelonretrouvedanslefichierdeconfigurationest:strutsconfig.Ladtd
correspondanteestcelleci:
<!ELEMENTstrutsconfig(displayname?,description?,datasources?,form
beans?,globalexceptions?,globalforwards?,actionmappings?,controller?,
messageresources*,plugin*)>
<!ATTLISTstrutsconfigidID#IMPLIED>

Onlappellelabaliseroot,c'estdirelaracinedetouteslesautres.Onnepeuttrouverquune
seuledecettebalisedansunmmefichier.Ilestaisdevoirquelleaccepte(danssoncorps)les
balises:

displayname:nomdelapplicationlieaufichierdeconfigurationencours

description:descriptiondufichierdeconfiguration

datasources:lensembledessourcesdedonnes(1instanceaccepte)

formbeans:lensembledesformbean(1instanceaccepte)

globalexceptions:lensembledeshandlerdexception(1instanceaccepte)

globalforwards:lensembledespointsderetourdetypeglobal(1instanceaccepte)

actionmappings:lensembledesmappingsdaction(1instanceaccepte)

controller: paramtrage dun contrleur spcifique (dit RequestController) (1 instance


accepte)

messageresources:dfinitiondunbundledemessages(multiplesinstancesacceptes)

plugin: dfinition dun package (extrieur) connect: plugin (multiples instances


acceptes)

3.8.2.Datasources
Vosobjetsmodlesontpeuttrebesoindtabliruneconnexionavecunebasededonnes.Dans
cecas,vouspouvezutilisezStrutspourinitialiserunpooldeconnexionpluttquedepasser
directement par votre serveur dapplication. Lintrt premier est que vous naurez pas
toucher la configuration de votre serveur dapplication lors du dploiement de votre
application.Celasimplifiedoncgrandementledploiementdecelleci.
VoicilapartiedeDTDcorrespondanteauxDataSource:
<!ELEMENTdatasources(datasource*)>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

22/57

<!ATTLISTdatasourcesidID#IMPLIED>
<!ELEMENTdatasource(setproperty*)>
<!ATTLISTdatasourceidID#IMPLIED>
<!ATTLISTdatasourceclassName%ClassName;#IMPLIED>
<!ATTLISTdatasourcekey%AttributeName;#IMPLIED>
<!ATTLISTdatasourcetype%ClassName;#REQUIRED>

Labalisedatasourcesregroupelensembledesdatasourceconfigurpourlapplication.Elle
contientdoncde0nbalisesdatasource.
Chaquebalisedatasourcedfinitprcismentlesparamtresdeconfigurationdesconnexions
unesourcededonnes(etplusprcismentdesobjetsJDBC2.0DataSource).Voiciles
diffrentesbalisesquellepeutcontenir:
className:cettebaliseestoptionnelle.Elledfinitlaclasseservantconfigurerlasource
dedonnesetdoitdonccontenirtouteslesdonnesncessairespourinstancierune
DataSourcedutyperequis.Autrementdit,elledoitgrerlensembledesproprits
spcifiesdanslesclausessetproperty(cf.plusbas)delabalise.Sicettebaliseestomise,
Strutsutiliselaclassepardfaut:org.apache.struts.config.Configpourgrerles
proprits.
key:estuneclquipermetlapplicationdaccderlobjetdatasourcecrparStruts.
Parexempledanslecasdunecl:stockdb,lapplicationpourrayaccdervia:
org.apache.struts.action.DATA_SOURCE/stockdb(siaucunprfixedemodule
nexiste:prfixe="")
type:spcifielenomdelaclassedelaDataSourcequidoitimplmenter
java.sql.DataSource.CetteclasseestutiliseparStrutspourcreruneinstancedela
datasource,elleconfigurvialaclassedfinitdanslattributeclassName.
setproperty:cettebalisepermetdattribuerunecletunevaleur.Ellesservent
principalementconfigurerlesparamtresdeconnexionlasourcededonnes(login,
password,paramtresdelabase)
VoicilaDTDcorrespondante:
<!ELEMENTsetpropertyEMPTY>
<!ATTLISTsetpropertyidID#IMPLIED>
<!ATTLISTsetpropertyproperty%PropName;#REQUIRED>
<!ATTLISTsetpropertyvalueCDATA#REQUIRED>

property:reprsentelacl(proprit)
value:reprsentelavaleurlielacl

3.8.2.1.Exemple
VoiciunexempleXMLdelaclausedatasources:
<datasource>
<setpropertyproperty="autoCommit"value="true"/>
<setpropertyproperty="decription"value="DataSourceMysqlLocal"/>
<setpropertyproperty="driverClass"value="com.mysql.jdbc.Driver"/>
<setpropertyproperty="maxCount"value="4"/>
<setpropertyproperty="minCount"value="1"/>
<setpropertyproperty="user"value="root"/>
<setpropertyproperty="password"value=""/>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

23/57

<setpropertyproperty="url"value="jdbc:mysql://localhost/contacts"/>
</datasource>

3.8.2.2.Utilisationdanslapplication
VouspouvezaccderlobjetDataSourcedepuisuneActionvialecodesuivant:
DataSourceds=
servlet.getServletContext().getAttribute(org.apache.struts.action.DATA_SOURCE/
stockdb);

Apartirdel,vouspourrezrcupreruneconnexionvotresourcededonneseteffectuertous
lestraitementsquevousdsirer.

3.8.3.FormBeans
Lesbalisesformbeans et formbean indiquentStrutsquelidentifiantuniqueestassociune
classeActionForm.EllesserventgalementinitialiserlesDynaForms(cf.5.3).
VoicilapartiedeDTDcorrespondante:
<!ELEMENTformbeans(formbean*)>
<!ATTLISTformbeansidID#IMPLIED>
<!ATTLISTformbeanstype%ClassName;#IMPLIED>
<!ATTLISTformbeanidID#IMPLIED>
<!ATTLISTformbeanclassName%ClassName;#IMPLIED>
<!ATTLISTformbeandynamic%Boolean;#IMPLIED>
<!ATTLISTformbeanname%BeanName;#REQUIRED>
<!ATTLISTformbeantype%ClassName;#REQUIRED>
<!ELEMENTformproperty(setproperty*)>
<!ATTLISTformpropertyclassName%ClassName;#IMPLIED>
<!ATTLISTformpropertyinitialCDATA#IMPLIED>
<!ATTLISTformpropertyname%PropName;#REQUIRED>
<!ATTLISTformpropertysize%Integer;#IMPLIED>
<!ATTLISTformpropertytype%ClassName;#REQUIRED>

Voiciunedescriptiondechacunedesbalises:

formbeans:encapsulelalistedesbeansformulairesdfinis.Lattributtypeatdclass.

formbean:dfinitunformulaireunique.
o

className:sertdfinirunbeandeconfigurationpourceformulaire(comme
pourlesDataSource)cependantcelaestnestpascommun.

dynamic:atdclass

name: reprsente lidentifiant unique qui permet daccder au formulaire et


dassociultrieurementleformulaireuneaction.Remarqueimportante:sila
porte de votre formulaire est celle de la session, vous pouvez accder au
formulairevialamthodegetAttribute()delobjetsession.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

24/57

type: doit indiquer une classe ActionForm valide. Cest cette classe qui sera
instanciepourcrerleformulaire.

Siletypedrive(ouest):org.apache.struts.action.DynaActionForm,lesbalisesformproperty
sontgalementinspectesparStruts.Chacunedellesdfinitunevaleurinitiale,unnometuntype
(parexemplejava.lang.String)pourchaquepropritduformulaire(cf.5.3)
3.8.3.1.Exemple
<formbeanname="contactForm"
type="com.society.contactbook.application.forms.ContactForm"/>

3.8.4.Exceptions
Labaliseglobalexceptionsregroupelensembledesexceptionsquevotreapplicationgreauplus
basniveaudurantletraitementdunerequte.Vouspouvezgrerautantdetypedexceptionque
vouslesouhaitez.Nouspouvonsassimilercettepartiedeconfigurationau trycatch dansle
langageJava.Eneffetvousdclarezunbloccatchviaunebaliseexception.
Voiciunedescriptiondesattributsquadmetcettebalise:

bundle:spcifielenomdubundlederessourcesquicontiendralesmessagespourcette
exception.

handler: spcifie la classe appele lorsque lexception se produit. Elle doit


imprativementdrivedelaclasseorg.apache.struts.action.ExceptionHandleroudune
classedrive.

key:dsignelacldumessagederreurquiseragnretquiserarecherchdansle
bundledemessages.

path:dfinitlURLlaquellelecontrleesttransfrlorsquelexceptionsurvient.

scope: indique Struts sil doit mmoriser les ActionError cres par la gestion de
lexceptiondanslaportedelasessionoularequte.

type:nommelexceptionquiseraintercepteparcegestionnaire.
3.8.4.1.Exemple

<globalexceptions>
<exceptionkey=database.errorpath=/errors/generalErrors.jsp
scope=requesttype=java.sql.SQLException/>
</globalexceptions>

Siuneexceptionestlancedurantletraitement,lemodledatabase.errorestrecherchdansle
bundlederessourcespardfaut(ApplicationResources.properties),unenouvelleActionErrorest
crelaidedumodle,puiselleestplacedanslesattributsdelarequteetlecontrleest
transmislapagederreurstandard.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

25/57

3.8.5.GlobalForwards
Les transfertsglobaux servent dfinirdes cheminsdaccs utilisablespar touteslesactions
dfiniesdanslaconfiguration.Siparexempleuncertainsnombredactionsdoiventtransfrerle
contrleuncrandeconnexion,vouspouvezdfinircetransferticiaulieudelefairedans
chaqueaction.
VoicilapartiedelaDTDcorrespondante:
<!ELEMENTglobalforwards(forward*)>
<!ATTLISTglobalforwardsidID#IMPLIED>
<!ATTLISTglobalforwardstype%ClassName;#IMPLIED>
<!ELEMENTforward(icon?,displayname?,description?,setproperty*)>
<!ATTLISTforwardidID#IMPLIED>
<!ATTLISTforwardclassName%ClassName;#IMPLIED>
<!ATTLISTforwardcontextRelative%Boolean;#IMPLIED>
<!ATTLISTforwardmodule%RequestPath;#IMPLIED>
<!ATTLISTforwardnameCDATA#REQUIRED>
<!ATTLISTforwardpath%RequestPath;#REQUIRED>
<!ATTLISTforwardredirect%Boolean;#IMPLIED>

Voiciladescriptiondelensembledesattributs:

contextRelative:indiquesipathestrelatifaumoduleduneapplicationmodulaire(si
faux)oudelapplicationweb(sivraie)

name:reprsentelidentifiantuniqueduforward.Ilpermetderetrouverceforwarddans
uneactionaveclamthodefindForward()

redirect:sipositionntruelecontrleesttransmislapageavecuneredirectionplutt
quuntransfert.Unenouvellerequteestdonccre

Nousnutilisonsgnralementpaslesbalisessetpropertypourlesforward.Cependantcellesci
peuventvoustreutilessivoussouhaitezcrervospropresclassesdeforward(drivantdela
classedebase).Danscecaslvousdevrezgalementindiquerlenomcompletdelaclassedans
lattribut:className.
3.8.5.1.Exemple
Voiciunexemplesimpledutilisationdeglobalforwards:
<globalforwards>
<forwardname=homepath=/pages/home.jsp/>
</globalforwards>

3.8.6.Actionmappings
Cettepartieestsansdoutelapluscomplexe.Ellerelielesactions,lesformulairesetlestransferts.
VoicilapartiedelaDTDcorrespondante:
<!ELEMENTactionmappings(action*)>
<!ATTLISTactionmappingsidID#IMPLIED>
<!ATTLISTactionmappingstype%ClassName;#IMPLIED>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

26/57

<!ELEMENTaction(icon?,displayname?,description?,setproperty*,
exception*,forward*)>
<!ATTLISTactionidID#IMPLIED>
<!ATTLISTactionattribute%BeanName;#IMPLIED>
<!ATTLISTactionclassName%ClassName;#IMPLIED>
<!ATTLISTactionforward%RequestPath;#IMPLIED>
<!ATTLISTactioninclude%RequestPath;#IMPLIED>
<!ATTLISTactioninput%RequestPath;#IMPLIED>
<!ATTLISTactionname%BeanName;#IMPLIED>
<!ATTLISTactionparameterCDATA#IMPLIED>
<!ATTLISTactionpath%RequestPath;#REQUIRED>
<!ATTLISTactionprefixCDATA#IMPLIED>
<!ATTLISTactionrolesCDATA#IMPLIED>
<!ATTLISTactionscope%RequestScope;#IMPLIED>
<!ATTLISTactionsuffixCDATA#IMPLIED>
<!ATTLISTactiontype%ClassName;#IMPLIED>
<!ATTLISTactionunknown%Boolean;#IMPLIED>
<!ATTLISTactionvalidate%Boolean;#IMPLIED>

Voiciunedescriptiondechacunedesbalises:
attribute:spcifieunIDuniquepermettantdemmoriserlActionFormdanslaportede
larequteoulasessionsinonnameestutilis
forward/include:permettentdetransfrerlecontrleunnouveaucheminaulieude
traiterlaction
input:indiquelapageouactionquiagnrleformulaireservantentrerlesdonnes
parameter:permetdetransmettreunautreparamtrelaction,cependantilestalors
prfrabledutiliserlabaliseplusgnrale:setproperty
path:sertrelierlarequtelactioncedoittrelechemindelactionsansaucun
suffixe.Siparexemplevousavezspcifi/admin/add.dodanslactiondevotre
formulairealorsvousindiquerez/admin/adddanslepath
prefix/suffixe:spcifientrespectivementunprfixeetunsuffixequiserontajoutsaux
nomsdepropritsdubeanActionFormavantdelesassocierauxnomsdeparamtredela
requte
roles:permetderestreindrelaccslactionenindiquantunensemblederlespare
parunevirgule.
type:spcifielaclassedelAction.
validate:sicetteattributestpositionnfalse,lecontrleurnexcutepaslamthode
validate()delActionForm
3.8.6.1.Exemple

<actionpath="/Welcome"
scope="request"
validate=false
type="com.society.contactbook.application.actions.WelcomeAction">
<forwardname="success"path="home"/>
</action>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

27/57

3.8.7.Controller
Cettebalisenestpassouventutilise.SeuleslespersonnessouhaitantmodifierlenoyaudeStruts
senserviront!
<!ELEMENTcontroller(setproperty*)>
<!ATTLISTcontrolleridID#IMPLIED>
<!ATTLISTcontrollerbufferSize%Integer;#IMPLIED>
<!ATTLISTcontrollerclassName%ClassName;#IMPLIED>
<!ATTLISTcontrollercontentTypeCDATA#IMPLIED>
<!ATTLISTcontrollerforwardPatternCDATA#IMPLIED>
<!ATTLISTcontrollerinputForward%Boolean;#IMPLIED>
<!ATTLISTcontrollerlocale%Boolean;#IMPLIED>
<!ATTLISTcontrollermaxFileSizeCDATA#IMPLIED>
<!ATTLISTcontrollermemFileSizeCDATA#IMPLIED>
<!ATTLISTcontrollermultipartClass%ClassName;#IMPLIED>
<!ATTLISTcontrollernocache%Boolean;#IMPLIED>
<!ATTLISTcontrollerpagePatternCDATA#IMPLIED>
<!ATTLISTcontrollerprocessorClass%ClassName;#IMPLIED>
<!ATTLISTcontrollertempDirCDATA#IMPLIED>

Voiciladescriptiondechacundesattributs:

bufferSize: permet de modifier la taille du tampon dentre lors du traitement de


chargementdefichiers

maxFileSize:dfinitlataillemaximaledufichierpouvanttrechargetpeuttresuivi
dunK(kilo),dunM(mga)oudunG(giga)

contenType:permetdedfinirunautretypedecontenupardfautquetext/html

debug:activeledbuggagesilavaleurestsuprieure0

forwardPattern:permetdemodifierlafaondontlecheminduneapplicationestliune
URLrelativeaucontextelaidedeforwardPattern.Lavaleurde$Aestexpanseen
prfixedelapplication(/applicationContextparexemple)etcellede$Pdanslechemin
requis.Pardfautlavaleurest$A$P

inputForward:positionntrue,lesparamtresdesattributsinputdesbalisesactionsont
traitscommedestransfertsetnoncommedeschemins.C'estdirequilssontcompars
auxbalisesforwarddfiniesglobalementetlocalementaulieurdtretraitscommedes
URI

locale:mmoriseunlocaledanslasessiondelutilisateursicenestpasdjfait.(lorsque
cetattributestpositionntrue)

nocache:unerequtededsactivationdelamiseencachedescontenusestenvoyeau
navigateurclientavecchaquerponseHTTP

pagePattern:indiqueStrutscommentrelierlespageslURLsousjacente,dunefaon
assezsemblableforwardPattern

processorClass:remplacelaclasseprocessorderequtepardfautdeStrutsparune
personnalise.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

28/57

3.8.7.1.Exemple
Voiciunexempledebalisepouvanttreutilise:
<controllernocache=truecontentType=image/jsp/>

3.8.8.Messageresources
Cettebalisevouspermetdedfinirunbundlederessourcespourvotreapplication.Vouspouvez,
bienentendu,endfinirplusieurssibesoinest.
<!ELEMENTmessageresources(setproperty*)>
<!ATTLISTmessageresourcesidID#IMPLIED>
<!ATTLISTmessageresourcesclassName%ClassName;#IMPLIED>
<!ATTLISTmessageresourcesfactory%ClassName;#IMPLIED>
<!ATTLISTmessageresourceskey%AttributeName;#IMPLIED>
<!ATTLISTmessageresourcesnull%Boolean;#IMPLIED>
<!ATTLISTmessageresourcesparameterCDATA#REQUIRED>

Voiciunedescriptiondechacundesattributs:

factory:permetdespcifierdoproviennentlesdonnesdelaressourcedemessages.
Pardfaut,ilestconfigurpourliredesfichiersproperties

key:dfinituneclpouraccderaubundle.

null: permet de spcifier ce quil faut faire lorsquun message nest pas trouv. Si
lattributestpositionntrue,ilretournenull.Positionnfalse,ilretourneunmessage
derreuraveclaclrrone.

parameter:permetdetransmettreunparamtrelafabriquelorsquelebundleestcr.
Pourlesfabriquesbasedefichiersdeproprits,cestlechemindufichier.
3.8.8.1.Exemple

Voiciunexempledeconfigurationdunbundle:
<messageresources
key=com.labosun.MAIN_MESSAGES
parameter=com.labosun.MainMessages/>

VousdevezavoirunfichierMainMessages.propertiesdansvotrepackage:com.labosun

3.8.9.Plugin
Cedernierlmentvouspermetdechargerdynamiquementdesfonctionnalitssupplmentaires
dansleframeworkStruts.
<!ELEMENTplugin(setproperty*)>
<!ATTLISTpluginidID#IMPLIED>
<!ATTLISTpluginclassName%ClassName;#REQUIRED>

Voiciunedescriptiondechacundesattributs:

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

29/57

className:spcifielaclassequichargeleplugin.

setproperty: permet de transfrer au plugin les arguments ncessaires son


fonctionnement

3.8.9.1.Exemple
Voiciunexempledeconfigurationdupluginvalidator:
<pluginclassName=org.apache.struts.validator.ValidatorPlugIn>
<setpropertyproperty=pathnames
value=/WEBINF/validatorrules.xml,
/WEBINF/validation.xml/>
</plugin>

3.9.IntgrationaveclapplicationWeb
Nousavonsvu,jusquprsent,lefonctionnementdeStrutsindpendammentduneapplication
webbasesurunmoteurdeservlet.
SilonnepeutpasintgrerStrutsavecnotreapplicationweb,alorsceframeworkestinutilisable!
Bienentenduunesolutionexiste,nousallonsredirigerunensembledurl(grceaumappingparun
pattern)uneservletduframeworkStruts.
Nous utiliserons : org.apache.struts.action.ActionServlet. Cette servlet va nous permettre
dindiquerlefichierdeconfigurationutiliser,letypededebuggageprendreencompte
Nousnavonsplus,ensuite,qumappinguntypedurlcetteservlet.
Voiciunexempledecodeincluredanslefichierdedescriptiondevotreapplicationweb:
web.xml:

<!StandardActionServletConfiguration(withdebugging)>
<servlet>
<servletname>actionstruts</servletname>
<servletclass>org.apache.struts.action.ActionServlet</servletclass>
<initparam>
<paramname>config</paramname>
<paramvalue>/WEBINF/strutsconfig.xml</paramvalue>
</initparam>
<initparam>
<paramname>debug</paramname>
<paramvalue>2</paramvalue>
</initparam>
<initparam>
<paramname>detail</paramname>
<paramvalue>2</paramvalue>
</initparam>
<loadonstartup>2</loadonstartup>
</servlet>

<!StandardActionServletMapping>
<servletmapping>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

<servletname>actionstruts</servletname>
<urlpattern>*.do</urlpattern>
</servletmapping>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

30/57

FrameworkStrutsModleMVC

31/57

4.Lestiles
4.1.Prsentation
LorsquondveloppeuneapplicationWeb,onremarquegnralementquelensembledespages
possde un lment central variable entour dlments plus ou moins statiques (barre de
navigation,entte,pieddepage)
LabibliothqueTiles,quiestunpluginintgrableStruts,permetdecrerdesmodlesdepage
rutilisablespourlensembledevotreapplicationlaidedundocumentXMLcentral.
CettelibrairiepeutsutiliseraussibienindpendammentdeStrutsoueninterne.Nousverronsici
lutilisationintgreStruts(cequinouspermetdavoirtoutelapuissancedeStrutscombine
aveccelledestiles).

4.2.Architecture
VoiciunschmarcapitulatifdelarchitectureetutilisationdeTiles:
Dfinitions
(tilesdef.xml)

Strutsconfiguration
strutsconfig.xml
mainLayout
(1dfinition)
Actionmapping

index
(extendsmainLayout)
Actionmapping
document
(extendsmainLayout)

body.jsp
(contenu)

header.jsp
(contenu)

layout1.jsp
(structure)

footer.jsp
(contenu)

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

32/57

Cettearchitectureprservelasparation:structuredespagescontenusdespages.Eneffet,vous
pouvezcrerautantdelayoutsquevouslesouhaitiez;pouraffecterunlayoutunepageilsuffit
queladfinitiondecettepage(danslefichierdeconfiguration)hritedulayoutconcern.Nous
pouvonsdoncremarquerquelacoucheapplicationnintervientpasdirectementsurlespagesjsps
maispasseparlacouchedestructuration(lestiles).

4.3.Installation
AfindepouvoirutiliserlabibliothqueTiles,vousdevezladclarerauprsdelaconfiguration
Struts.
Tilestantunpluginstrutsvousavezjusteinsrercesquelqueslignesdansvotrefichierde
configurationStruts:
<pluginclassName="org.apache.struts.tiles.TilesPlugin">
<setpropertyproperty="moduleAware"value="true"/>
<setpropertyproperty="definitionsparservalidate"
value="true"/>
</plugin>

Tilestantunpluginvousdevezavoirleslibrairiesdansvotreclasspath(toutcommevousavezles
librariesdeStrutsdedans).Depuislaversion1.2deStruts,TilesestintgrdansStruts(struts.jar).
Sivousutilisezuneversionantrieure(cequinestpasrecommand)vousdevrezajouterla
librairieTilesmanuellement(voustrouverezcettelibrairieici:http://).Pardfaut,leplugin
initialiselapplicationaveclefichier:tilesdef.xmldudossierWEBINF.

4.4.Fichierdeconfiguration
Lefichierdeconfiguration,commepourStruts,estlepointcentraldegestiondeTilesdansvotre
application.Cestdanscefichierquevousdevrezdfinirlensembledesdfinitionsdevotre
application.Voiciunedescriptiondelensembledesbalisespouvanttrescontenusdanscefichier.
Comme pour tout fichier xml bien form, il suffit de se baser sur la DTD pour connatre
lensembledelastructureappliquernotrefichierxml.VoicilelienverslaDTDdufichierde
configurationdesTiles:http://jakarta.apache.org/struts/dtds/tilesconfig_1_1.dtd.

4.4.1.Baliseracine
La premire balise rencontre est la balise parente. En effet, cest elle qui va contenir
lensembledesbalisesenfantesdeconfigurationdesTiles.
<!ELEMENTtilesdefinitions(definition+)>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

33/57

Cettebalisenepeutcontenirquedesbalisesdetype:definition.Ellenesertqu
regrouperlensembledesdfinitions.
4.4.2.Balisedefinition
Cestlabaliselaplusimportant.Eneffet,ellepermetdedfinirunedfinitiondetile,
cestdireunestructuredepagepouvanttreinsrdansunepageoudirectement
utiliseentantqueforwarddanslaconfigurationStruts.Cettebalisecontientbienplus
dattributquelaprcdentecarellepermetdegrerlensembledescasdestructuredune
page(layoutoucontenudepage).VoicilapartiedeDTDcorrespondante:
<!ELEMENTdefinition(icon?,displayname?,description?,put*,putList*)>
<!ATTLISTdefinitionidID#IMPLIED>
<!ATTLISTdefinitioncontrollerClass%ClassName;#IMPLIED>
<!ATTLISTdefinitioncontrollerUrl%RequestPath;#IMPLIED>
<!ATTLISTdefinitionextends%DefinitionName;#IMPLIED>
<!ATTLISTdefinitionname%DefinitionName;#REQUIRED>
<!ATTLISTdefinitionpage%RequestPath;#IMPLIED>
<!ATTLISTdefinitionpath%RequestPath;#IMPLIED>
<!ATTLISTdefinitionroleCDATA#IMPLIED>
<!ATTLISTdefinitiontemplate%RequestPath;#IMPLIED>

controllerClass:lenomcompletdelaclassespcifiqueutiliserentantque
contrleur(sionnesouhaitepasutilisercellepardfaut)
extends:utiliserpourfairedriverladfinitionencoursdunedfinitionmre
(celapermetdesurdfinirlesvaleursdesattributsdeladfinitionmre)
name:nomuniquedeladfinition
path(oupage):dfinitlapageutiliserpourlastructuredecettetile(layout).La
ressourceestalorscharge(ouincluseencasdepagejsp)
role:dfinitunrolepourlagestiondelascurit(dfinitiondutypedaccsla
dfinition)
template:mmechosequepath.Utilispourlacompatibilitaveclalibrairie:
Template

UnedfinitionpeutgalementcontenirdesbalisesputetputListquipermettededfinir
desattributs(put)etdeslistes(putList).
4.4.3.Baliseput
Labaliseputpermetdedfinirunattribut(cl=>valeur)dansunedfinition.
VoicilaDTDcorrespondate:
<!ELEMENTput(#PCDATA)>
<!ATTLISTputidID#IMPLIED>
<!ATTLISTputcontentCDATA#IMPLIED>
<!ATTLISTputdirect%Boolean;#IMPLIED>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

34/57

<!ATTLISTputnameCDATA#REQUIRED>
<!ATTLISTputtype%ContentType;#IMPLIED>
<!ATTLISTputvalueCDATA#IMPLIED>

name:lidentifiantuniquepourlattribut(lacl)
type:dfinitletypedelavaleur(string,page,template,definition)
direct:mmechoseque:type="string"(compatibilitavecTemplate)
value(oucontent):lavaleurassocilacl(dfinitaveclattributname)
content:mmechosequevalue(compatiblitavecTemplate)

4.4.4.BaliseputList
LabaliseputListpermetdedfinirunelistedansunedfinition.
VoicilaDTDcorrespondante:
<!ELEMENTputList((add*|item*|bean*|putList*)+)>
<!ATTLISTputListidID#IMPLIED>
<!ATTLISTputListnameCDATA#REQUIRED>

Leseulattributestlenomdelaliste(name).Cependantlalistepeutcontenirdiffrents
lments:

add:mmechosequunlmentput
item:lmentspcifiquedelaliste(cf.cidessous)
bean:lmentdetypeJavaBean(cf.cidessous)
putList:autreliste
4.4.5.Baliseitem

Labaliseitemestutilisepourdfinirunlmentdansuneliste.Cetlmentpeutcontenir
diffrentesproprits(valeur,icne,lien,messagedinformation).
VoicilapartieDTDcorrespondante:
<!ELEMENTitem(#PCDATA)>
<!ATTLISTitemidID#IMPLIED>
<!ATTLISTitemclasstype%ClassName;#IMPLIED>
<!ATTLISTitemiconCDATA#IMPLIED>
<!ATTLISTitemlinkCDATA#REQUIRED>
<!ATTLISTitemtooltipCDATA#IMPLIED>
<!ATTLISTitemvalueCDATA#REQUIRED>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

35/57

classtype:nomcompletdelaclasseutiliser(pardfaut:
org.apache.struts.tiles.beans.MenuItem)
icon:valeurdelapropriticon
link:valeurdelapropritlink
tooltip:valeurdelaproprittooltip
value:valeurdelapropritvalue
4.4.6.Balisebean

Labalisebeanpermetdedfinirunlmentdetype:JavaBeandansuneliste.Celapermetde
personnalitlensembledespropritsdisponibles.Chacunedesespropritstantinitialisevia
unebalise:setproperty(descriptioncidessous).
VoicilapartiedeDTDcorrespondante:
<!ELEMENTbean(setproperty*)>
<!ATTLISTbeanidID#IMPLIED>
<!ATTLISTbeanclasstype%ClassName;#REQUIRED>

Vouspouvezremarquerquelattributprincipalest:classtypequipermetdedfinirlenom
completdelaclasseutiliserpourleJavaBean.

4.4.7.Balisesetproperty
La balise setproperty se retrouve trs souvent dans les fichiers de configuration (cf. balise
DatasourcefichierdeconfigurationStruts).EllepermetdinitialiserunepropritdunBeanen
indiquantlenomdecellecietlavaleurassocie.
VoicilaDTDcorrespondante:
<!ELEMENTsetpropertyEMPTY>
<!ATTLISTsetpropertyidID#IMPLIED>
<!ATTLISTsetpropertyproperty%PropName;#REQUIRED>
<!ATTLISTsetpropertyvalueCDATA#REQUIRED>

property:dsignelenomdepropritinitialiser

value:dsignelavaleurassocierlaproprit

Voicilamajoritdesbalises/attributsutilissdansledveloppementaveclepluginTiles.
Vouspouvezremarquerquilnyaaucunmoyendediffrenciervostemplates(oulayout)devos
pagesrellementutilisables.EneffetTilesvousfournitlesimplefaitdecrerdesdfinitionsetde
fairedelhritageentreelles.Cestdoncaudveloppeurdegrer(viaunenorme,convention)
ladiffrenciationentrelayoutetpages.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

36/57

4.5.Layouts
Leslayoutdfinissent(unpeucommedanslalibrairieSWING)lastructuredunepage,cest
direlesdiffrentslmentsdunmodleetlepositionnementdeceuxl.
Vouspouvezcrerdesmodlespour:

lespages

descomposants(liste,formulaire)

desvuesspciales

Enthorie,vousnutiliserezjamaisdirectementunedfinitiontypelayoutdansunepagejsp
(saufcasspcifiques)maisvouslesutiliserezcommedfinitionsparentes.
Voiciunexemplededfinitionquireprsenteunmodledepage:
<definitionname="template.main"path="/tileslayouts/mainTemplate.jsp">
<putname="title"value="Notitle"/>
<putname="header"value="/tilescomponents/default/header.jsp"/>
<putname="hmenu"value="pub.hmenu.default"/>
<putname="vmenu"value="pub.vmenu.default"/>
<putname="cbody"value="/tilescomponents/default/cbody.jsp"/>
<putname="rbody"value="/tilescomponents/default/rbody.jsp"/>
<putname="footer"value="/tilescomponents/default/footer.jsp"/>
</definition>

Cettedfinitiondclareunmodledepagequicontient:
untitre:title
unbandeauentte:header
unmenuhorizontal:hmenu
unmenuvertical:vmenu
uncontenuprincipale:cbody
uncontenusecondaire:rbody
unpieddepage:footer
Unepagejspdestructureestassociecettedfinition(viapath="")afinquonpuissedfinirle
positionnementdechacundeslments.
Danscettedfinitionleslmentssontdclarsetinitialisspardesvaleurspardfaut.
Cettedfinitionatcriteafindtreutilispardesdfinitionsdepagerelle.

4.5.1.Lefichierdestructure
Nousvenonsdevoircommentdclarerunedfinition,cependantdanslecasdunmodle(layout)
nousdevonsutiliserunepageJSPafindindiquercommentplacerleslments.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

37/57

DansvotrepageJSP,vouspouvezalorsutiliserlesvaleursdechacundesattributspourlesinsrer
dansvotrepagemodle.
Votreattributpeutpointerversdiffrentechose:

Unechanedecaractre

Unedfinition

UnepageJSPouautre

Ilvousfaudrautiliserlalibrairietiles(taglib)dansvotrepagemodleafindinsrerlesdiffrents
lments.
Voiciunedescriptiondelensembledecettelibrairie:
//TODO
//TABLEAU
Voiciunexempledepagemodeledebase:
<%@tagliburi="/tags/strutstiles"prefix="tiles"%>
<html>
<title><tiles:getAsStringname="title"/></title>
<body>
<tablewidth="100%"height="100%">
<trheight="100"align="center"bgcolor="#001188"><td>
<tiles:insertattribute="header"/>
</td></tr>
<trbgcolor="#FFFFFF"><tdvalign="top">
<TABLE>
<tr>
<tdwidth="250"valign="top">
<tiles:insertattribute="menu"/>
<td>
<td>
<tiles:insertattribute="body"/>
</td>
</tr>
</TABLE>
</td></tr>
<trheight="100"align="center"bgcolor="#001166"><td>
<tiles:insertattribute="footer"/>
</td></tr>
</table>
</body>
</html>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

38/57

Cefichierpermetdedfinirlemplacementdescomposants.Chaquedfinitiondepagequihritera
dulayoututilisantcettepageverrasescomposantsplacsdecettemanire:

Header
M
E
N
U

Body
Footer

4.6.Tiles
Les Tiles sont galement des dfinitions. Cependant elles sont utilisables rellement car elle
dfinissentdespagesfinales.Unetileestleplussouventunedfinitionhritantduneautre(de
typelayout)etquisurdfinitlensembledesattributsspcifiquelatile.
Parexemple,sivousutilisezlemodledcritprcdemmentvouspouvezjusteavoirbesoinde
redfinirletitredelapageetlecontenuprincipale(voirgalementsecondaire).Danscecasl,
vousgardezlebandeau,lesmenus,lefooterpardfauts.
Celavitelaredondancedinformationetsivoussouhaitezchangerdebandeau,ilvoussuffirade
modifierladfinitiondumodleprincipal.

4.7.Exempledarchitecturededfinitions
VoiciunschmarcapitulatifduneutilisationdelalibrairieTiles:

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

Layouts

Page

pub.login
Dfinitionrelles

pub.index

Form

form.user
form.login

39/57

List

list.ress
list.users

pub.ress

Nousavonsdonc3layouts:

Page:structureglobaledunepage

Form:modlepourlesformulaires

List:modlepourleslistes

Ensuite les dfinitions (tiles) hritent du layout utiliser et redfinissent les lments
personnaliser.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

40/57

5.Validator&Formulaires
5.1.Prsentationetarchitecture
Strutspermetdecrerfacilementdesformulaireslaidedediffrentesbalisespersonnalises.La
questionmaintenantest:commentgrerlavalidationdecesformulaires?
Pourcela,ilexisteleframeworkValidator(inclusdansleProjetCommonsdApache),dvelopp
par David Winterfeldt. Il tait au dpart une tierce partie ajoute au framework Struts.
Aujourdhui,cestunframeworkindpendantpouvanttreutilisavecousansStruts.
Ceframeworkcontientdiffrentsoutilsquivontnousviterdedevoirrcrirenospropresclasses
devalidation.Ainsi,pourvrifierquedeschampssontbienremplisoubiendansuncertain
format,onaungaindetempsnonngligeable.
Leprincipeestlesuivant:
DanslalistedesfichiersdeconfigurationdeStruts,quevoustrouverezdanslerpertoire
~/WEBINF/, setrouvent lesfichiers validation.xml etvalidatorrules.xmlquivont permettre
entreautreslemappingentrelesbalisesdesformulairesetlesclassesdevalidations.
Danslerpertoire~/WEBINF/lib,setrouvent2fichiersjar,commonsvalidator.jaret
jakartaoro.jarquicontiennentcesclassesdevalidations.
Chaquefoisquelonsouhaitefaireunevrificationsurunchampdunformulaire,onvamapper
cechamplamthodedelaclassecorrespondante.Celapeutparatreflouaudpart,maisnous
verronsdansleschapitressuivants,lamarchesuivrequiestenfaittrssimple.

5.2.Fichiersdeconfiguration
5.2.1.Danslefichierstrutsconfig.xml
Ceframeworkdevalidationncessitedonclutilisationdedeuxfichiersdeconfigurationquelon
vadclarer,telsdesplugins,danslefichierstrutsconfig.xml.Pourcelaonvautiliserlabalise
<plugin>etluiindiquerlescheminsversnosdeuxfichiersXML:

Dfinitiondelabalise<plugin>:

plugin

lmentracinedeladfinition.Onaunebalisepluginpourchaque

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

41/57

"plugin"ajout.
className:attributdelabaliseplugin,ilpermetdedfinirlechemindela
classeinstancier,interneouexterneStruts.Celasignifiequelonpeut
parfaitementcrersonpropreframeworkdevalidationvoireunframework
dunetouteautreutilit.
o

setproperty

Silaclasseinstancie(className)prenddesargumentsenparamtre,ils
serontdfinisdanscettebalise.Onadoncunebalisesetpropertypour
chacundesarguments.
property:attributdelabalisesetproperty,ilpermetdespcifierlenomde
largument.
values:attributdelabalisesetproperty,ilpermetdespcifierlavaleurde
largumentdfinidansproperty.

Nousvenonsdoncdespcifierunenouvellebaliseplugin,toutcommeonlafaitpourlesTiles
prcdemment,etdeuxnouveauxfichiers.
Voyonsdoncplusendtailcequesontcesfichiersetquoiilsvontnousservir.

5.2.2.Lefichiervalidatorrules.xml:
Fourniavecleplugin,cefichierXMLdfinilesrglesquelonpourrautiliserpourtesterles
valeursdeschamps.Ilpermetdeffectuerlelienentreletypedevalidation(champrequis,champ
email)etlecheminverslamthodeetlaclassecorrespondantequipermettrontdeffectuer
loprationdevrificationdesdonnes(valeurduchamps).
Debase,StrutsValidatorgreleschampsvides,lesformatsdemailoudedateinvalides,les
longueursdechampsminimumoumaximum,etbiendautresencore.
Vous trouverez la description de toutes ces validations sur le site de la fondation Apache:
http://struts.apache.org/userGuide/dev_validator.html dans la section "Standard Built In
Validations".
Dfinitiondesbalisesdufichiervalidatorrules.xml:

formvalidation
o

global

lmentracinedufichier.
Tous les lments inclus dans la balise global seront accessibles par
lensembledesformulaires(sortedeconstantes)

validator

Dfinitchaquetypedevalidationetlelielamthodecorrespondante.
Attributsdelabalisevalidator:
name:dfinitlenomlogiquedelavalidation.
classname: dfinit le chemin vers la classe contenant la mthode de
validationcorrespondante.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

42/57

method:dfinitlenomdelamthodedevalidationcorrespondante.
methodParams:typedesargumentspasssenparamtre.
msg:dfinitlemessagederreurafficherencasdenonvalidationdu
champ.
depends:dfinitsilavalidationestobligatoireounon.
jsFunctionName:dfinitlenomdelafonctionjavascriptcorrespondante
quisexecuteractclient

javascript

Dfinitlecodedelafonctionjavascriptquisexcuteractclient.

Nousallonsvoiruneexplicationdelundes"validator"fournipardfautdanslefichiervalidator
rulesdebase.

Ilsagiticiduvalidatorvrifiantquunchampestrequis,cestdirequilvrifiequelechamp
nestpasvide.Onpeutdoncvoirquilatnomm"required",quilestrattachlamthode
validateRequireddelaclasseFieldChecks. Encasdenonvalidationduchampmappce
validator,lemessagederreursetrouvantunpeuplushautdanslefichiervalidatorrules.xmlsera
affich:

Danslecasprsent,onauraitlemessagearg0isrequired.

5.2.3.Lefichiervalidation.xml:
Unefoislesdiffrentstypesdevalidationdfinis,cestdanslefichiervalidation.xmlquivanous
serviramapperleschampsdenosformulairesauxvalidationsdfiniesdansvalidatorrules.xml.
Dfinitiondesbalisesdufichiervalidation.xml:

formvalidation
o

global

lmentracinedufichier.
Entrecesbalisesvonttredfiniesdesinformationsqui
serontaccessibles,visiblesparlensembledesformulaires
denotrefichier(constantes).

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

constant

Achaqueconstantecorrespondunebaliseconstant.

constantname

Cettebalisepermetdedfinirlenomdelaconstante

constantvalue

Cettebalisepermetdedfinirlavaleurdelaconstante.On
va pouvoir par exemple dfinir lexpression rgulire
dfinissantlavaleurdecetteconstante

Cette balise va englober tous les mappings de nos


diffrentsformulaires.

formset

43/57

form

chaqueformulairecorrespondunebaliseform.
name: attributdelabalise form, ilpermetdedfinirle
nomduformulaireconcern.Cenomcorrespondcelui
dfinidanslefichierstrutsconfig.xml(attributnamedela
baliseformbean).

field

chaquechampduformulairencessitantunevalidation
correspondunebalisefield.
property:attributdelabalisefield,cesticiquelonva
spcifierlenomdelaproprit(champ)quelonvalier
laoulesvalidationsdfinie(s)dansvalidatorrules.xml.Ce
nomdepropritestceluidfinidansleFormBean.
depends:attributdelabalisefield,ilpermetdespcifier
lesnomsdesvalidationsassociesauchampproperty.

argn: baliseinternelabalise field, ellepermetde


spcifier largument donner au message derreur
correspondant.

var:baliseinternedelabalisefield,ellevapermettre
de prciser(si besoin est) une contrainte dintgrit
pourlesvalidationsspcifiesdanslattributdepends.
o

varname: baliseinternedelabalise var, onva


spcifier le nom de la validation dont on veut
donnerlacontraintedintgrit.

varvalue: baliseinternedelabalise var, onva


spcifier la contrainte dintgrit (exemple:
expressionrgulire,...).

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

44/57

Jusqumaintenantnousavonsunfichiervalidatorrules.xmlquidfinitunelistedevalidations
dontlesclasses(etdoncmthodes)setrouventdanslesfichierscommonsvalidator.jaretjakarta
oro.jar.
On a par ailleurs un formulaire dinscription(InscripForm) avec les champs nom(obligatoire),
password(obligatoire,tailleminimumde4caractres)etemail(obligatoire,formatdemail).
Nous souhaitons donc vrifier la validit de ces champs. Ceci va tre fait dans le fichier
validation.xml.Cesteneffeticiquelonvalierchacundenoschampsauxtypesdevalidations
dclaresdansvalidatorrules.xml.
DaprslesrglesdelavalidationdfiniescidessuspourleformulaireInscripForm,onpeutvoir
quelonvautiliserlesvalidatorssuivants(prsentsdanslefichiervalidatorrules.xmldebase):
required,emailetminlength.
Voici donc comment se prsentera notre fichier validation.xml pour la partie concernant
InscripForm:

Voyonslexplicationdufichierligneparligne:
o

Toutesnosdfinitionssontenglobesdanslabaliseracineformvalidation.

Dansunpremiertemps,nousdfinissonsuneconstante minPass.Elledfinitlalongueur
minimumdumotdepasse.Onlenglobedansunebalise<global>,cequisignifiequellesera
visiblepartouteslesdfinitionsdeformulairequivontsuivre.
NousavonsbesoinduchamppassworddansleformulaireInscripForm,ettantsusceptible
dtrerutilisdansunautreformulaire,onachoisidedclarercetteconstanteminPassavec
http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

45/57

uneporteglobale.Sachantquelechamppassworddevraavoirunelongueursuprieure4,
lavaleurdeminPassestinitialise4.

Labalise<formset>contientlensembledesvalidationsdesdiffrentsformulaires.Cela
signifiequelonauraunebalise<form>pourchaquedfinitiondeformulaire.Dansnotre
cas,nousnavonsqueInscripForm,nousavonsdoncuneseulebalise<form>.

Nousouvronsdonclabalise<form>etindiquonsdanslattributname,lidentifiantdenotre
formulaireindiqudanslefichierstrutsconfig.xml,"inscripForm".
Lepremierchampdontnousdevonsvrifierlavaliditestlechamp nom,ilesteneffet
obligatoire.Lobjetquenousallonscrericiestunobjetclient.Danslabalise<field>estdonc
indiqulenomdelapropritconcerne,cestdire nom.tantunchampobligatoire,on
ajoutelevalidatorrequired(cf:valitorrules.xml)pourlattributdepends.
Onvientdoncdelierlechampnomduformulaireauvalidatorrequired.
Encasderreurdevalidation,lemessagearg0isrequiredseraaffich(chapitresurvalidator
rules.xml).Afindespcifierjustementlenomquiseraaffichpourarg0,onutiliselabalise
<argn>avec0pourlavaleurden.Lavaleurdearg0estdfinidanslattributkey,ilsagitde
lavaleurdeclient.form.require.nomdufichierdeproperties.
Onvientmaintenantdedfinirplusprcismentlemessagederreur.

Nousallonsagirdelammemanirequepourlechampnomaveclechamppassword.
Cechampestobligatoireetdoittredunelongueurminimumde4caractres.Lattribut
dependsadoncpourvaleursrequiredetminlength.

Afindespcifierlavaleurdeminlength,onutiliselabalise<var>.<varname>nouspermet
despcifierlenomduvalidatorconcernet<varvalue>,lavaleur,justementquelonva
affectercevalidator.
Prcdemment,nousavonsspcifierquelaconstante minPass atinitialiseendbutde
fichier,avecuneporteglobale.Nousrutilisonsdonccetteconstanteafindelaffecter
minlength.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

46/57

Lesvalidatorspourleschampsnometpasswordviennentdoncdtredfinis.Ilnereste
quelechampemaildontladmarcheestlamme.Simplementlesvalidatorsconcerns
sontrequiredetemail(toujoursdufichiervalidatorrules.xml).

Nousvenonsdoncde:

initialiserlepluginValidatordanslefichierstrutsconfig.xmletfaitlesliensaveclesfichiers
validation.xmletvalidatorrules.xml.

dfinirlesdiffrentesvalidationsdanslefichiervalidatorrules.xmlenfaisantlesliensavecles
classesconcernes.

dfinirlesvalidationsfairesurleschampsdenotreformulaireenfaisantlesliensentreces
champsetlesvalidators(dfinisdansvalidatorrules.xml),danslefichiervalidation.xml.

Cependant,nousnavonspasparldesFormbeans;eneffet,laclasseassocienotreformulaire
InscripFormdoittendrelaclasseDynaActionForm,classefilledelaclasseActionForm.

5.3.DynaForms
Onavujusquemaintenantcommentlierleschampsdenosformulaires,maisaucunmomentla
dfinitiondelaclasseFormBeancorrespondante.
Eneffet,silonutiliseStruts,ilfautncessairementlierchaqueformulaireunbean;cestdire
uneclasseJavarespectantcertainesrgles:

unattributpourchaquepropritduformulaireaveclemmenom

ungetteretunsetterpourchaqueattributdubean

Parailleurscetteclassedoittendre ActionForm.Laclasse ActionForm possdeeneffetune


mthodevalidate()quivajustementpermettrededfinirlecodevalidantounonleschampsdu
formulaire.
Silonsuitcetteindication,notreclasseInscripFormestdfiniecommesuit:

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

47/57

CetteclassecontientdesattributscorrespondantsauxpropritsdenotreformulaireInscripForm
ainsiquedesgettersetdessetterspourchacundeux. Ellesurdfinitparailleurslamthode
validate() de la classe ActionForm afin de faire les validations des diffrents champs du
formulaire.
Rappelons que client.form.require.nom fait rfrence la cl se trouvant dans le fichier de
properties(cf.3.6.1)quonauradfinienamont.Lelienaveccefichiersefaitdanslefichierde
configurationstrutsconfig.xmllaidedelabalise<messageresources>(cf.3.8.1).
AprsavoircrnotreFormBean,revoyonslefichierstrutsconfig.xml:

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

48/57

Lefaitestque,sinousavonschoisidutiliserleframeworkValidator,cestjustementdanslebut
dviter dcrire les codes de validations pour chaque formulaire puisquils risquent dtre
redondants.Cestpourquoiunensembledevalidationsstandardssontregroupsdanslefichier
struts.jar.Deplus,cestpourcelaquenousavonsregrouptouteslesdfinitionsdesvalidationsde
champsdanslefichiervalidation.xml.
Cequelonveut,cestseservirdecesdfinitionsetlesmappernotreFormBean.
NousallonsdonctendrelaclasseValidatorForm,sousclassedelaclasseActionForm.Cette
classeestinclusedansleframeworkValidator(onpourraletrouverdanslefichierstruts.jar,dans
lepackageorg.apache.struts.validator).VoyonslanouvelleclasseInscripForm:

Sadfinitiondanslefichierstrutsconfig.xmlnechangepas:

Simplement,lesvalidationsdeschampsvontsefaireparrapportaufichiervalidation.xml.Lenom
dfini dans lattribut name est lidentifiant qui permettra, de lier les champs du formulaire
InscripFormauxvalidatorsrequis.
Nousavonsdjgagnuntempsnonngligeable,puisquepourchaqueformulaire,ilnoussuffitde
crerunFormBeancontenantdesattributsainsiqueleursaccesseurs.Maisnousallonsencore
simplifierlachose.Eneffet,chaquefoisredfinirtoutescesmthodespourchaquechampest
assezfastidieux.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

49/57

Pour cela, nous nallons plus crer de Form Bean pour chaque formulaire mais utiliser les
DynaForms,cestdiredfinirnosbalises<formbean>delamaniresuivante:

Aveccettenouvelledfinition,StrutsvasoccuperluimmedecrerleFormBean.Nousne
devonsquespcifierlespropritsduformulaireainsiqueleurstypes.
OnadoncdeuxpropritsvaliderpourceformulaireinscripForm,detypesStringetinitialises
vide.

5.4.RsumdelaconfigurationdesValidators
Rsumonslesdiffrentestapesraliserpourgrerlavalidationdunformulaire:
1. InstancierlaclasseValidatorPluginlaidedelabalise<plugin>afindedonnerlaccs
auxfonctionnalitsduframeworkValidatorStruts.
2. Configurerlesdeuxfichiersdeconfigurationvalidatorrules.xml(dontlaconfigurationpar
dfautetamplementsuffisante)etvalidation.xml.
3. CrerunFormBeanquitendlaclasseActionForm.
IlestdoncassezrapidedegrerlavalidationdesformulaireslaideduframeworkValidator.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

50/57

6.IntgrationavecXDoclet
xDocletestunoutiltrsintressantpourlagnrationautomatiquedecodeoudescripteursde
dploiementouautresfichiersutiles.
Nousallonstudier,danscettepartie,lintgrationdeXDocletpourlagnrationdesfichiersde
configurationstruts(strutsconfig.xml,validation.xml).
AfindebiencomprendreleprincipeXDoclet,ilfautsavoirlutiliseretconnatreAnt(cf.Essentiel
Ant).

6.1.Strutsconfig.xml
Lagnrationdufichierstrutsconfig.xmlestautomatisableavecXDoclet.
GrceXDocletvousallezpouvoirdfinirdirectementdansvotrecodejava:

Lesactionmapping

Lesactionexception

Lesactionforward

Lesactionform

Lesactiondynaform

CesdfinitionsvontsefairepartirdestagsXDoclet@Strutsquevouspouvezretrouver
ladresse:http://xdoclet.sourceforge.net/xdoclet/tags/apachetags.html
Nousallonsdtaillerlesplusimportantsdanscettesection.

6.1.1.Tags@Struts
VoiciunedescriptionnonexhaustivedestagslesplusutilissavecStruts:

@struts.action:dfinitunmappingpouruneclassedactionetlesdiffrentsattributslis
o

name:nomdelaction(doittreuniquedanslensembledelapplicationstruts)

type:typedelaclasseutiliser(pardfaut,laclasseencours).Ilestpossiblede
surcharger cette valeur dans certains cas (par exemple avec lutilisation de
frameworkexternetelqueSpring)

path:chemindelaction(url)

scope: domaine dans lequel laction va exister (request, session, application;


requestpardfaut)

input:chemindinputpourlaction

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

51/57

roles:rle(s)autoris(s)accdercetteaction

validate:indiquesistrutsdoitvaliderlesentrsduformulaire(true|false,true
pardfaut)

parameter:paramtredoptiondelaction(ilfautmettreaction).

struts.actionexception:dfinitunhandlersuruntypedexception(lielaction)
o

key:cldelapropritutiliserpourretrouverletextedelerreur

type:nomabsoludelaclassedexceptionquiseraintercept

handler:nomabsoludelaclasseutilisercommeHandlerdelexception

path:cheminverslaressourcequipermettradeterminerlarequte

scope:domainedanslequellobjetActionErrorserautilis.

struts.actionforward:dfinitunforwardlocalpourlaction
o

name:nomduforwardquiserautilisdanslaction

path:cheminverslaressourceutiliser

redirect:indiquesilfauteffectueruneredirectionounon(true|false,falsepar
dfaut)

strutsform:dfinitunformbeanetsesattributs
o

name:nomduformbeanquipermettradelerfrencer

OnretrouvegalementlestagslisaupluginValidator:

struts.validator:dfinitlavalidationeffectuersurunchampduformulaire
o

type: dfinit le type de validation effectuer sur le champ (required par


exemple)

struts.validatorargs:dfinitunargumentappliquerlavalidation
o

arg0value

arg1value

arg2value

arg3value

struts.validatorvar:dclareunevariablepourlevalidator
o

name:nomdelavariable

value:valeurdelavariable

Dautresattributspeuventtreutilissdanscertainscas.Nousnelesavonspasdtaillafinde
simplifiercetteprsentation.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

6.1.2.Exemples
Voiciquelquesexemplesdutilisationdecestagsdanslecodejava.

ExempledeclassAction:
/**
*
*@struts.actionpath="/admin/comment/add/display"name="commentForm"
*scope="request"validate="false"parameter="action"
*
*@struts.actionforwardname="success"path="admin.comment.add.display"
*/
publicclassDisplayCommentFormActionextendsAction{
protectedActionForwarddelegateExecute(ActionMappingmappings,
ActionFormform,HttpServletRequestrequest,
HttpServletResponseresponse)throwsApplicationException{
....
returnmappings.findForward("success");
}
}

UtilisationaveclesActionForm:
/**
*LoginFormclass.
*
*@struts.formname="loginForm"
*/
publicclassLoginFormextendsBaseForm{
//Membres
privateStringloginTxt;
privateStringpassword;
/**
*Defaultconstructor.
*
*/
publicLoginForm(){
}
/**
*@returnReturnsthelogin.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

52/57

FrameworkStrutsModleMVC

*@struts.validatortype="required"
*@struts.validatorargsarg0value="key.form.login.required.login"
*/
publicStringgetLoginTxt(){
returnloginTxt;
}
/**
*@paramlogin
*Thelogintoset.
*/
publicvoidsetLoginTxt(Stringlogin){
this.loginTxt=login;
}
/**
*@returnReturnsthepassword.
*@struts.validatortype="required"
*@struts.validatorargsarg0value="key.form.login.required.password"
*/
publicStringgetPassword(){
returnpassword;
}
/**
*@parampassword
*Thepasswordtoset.
*/
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}

6.1.3.IntgrationavecAnt
XDocletsintgreavecAntafindepouvoirautomatisersonexcutionauseindunscript.
<targetname="appwebdoclet"depends="appcompile">

<taskdefname="webdoclet"classname="xdoclet.modules.web.WebDocletTask">
<classpath>
<pathrefid="xdoclet.classpath"/>
<pathrefid="web.compile.classpath"/>
</classpath>
</taskdef>
<!xDocletpourleweb(strutsetweb.xml)>
<webdocletforce="${xdoclet.force}"
destdir="${web.gen.target.dir}"
mergedir="${web.merge.dir}"
excludedtags="@version,@author"
verbose="true">
<filesetdir="${struts.source.dir}">
<includename="**/*.java"/>
</fileset>

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

53/57

FrameworkStrutsModleMVC

54/57

<!strutsconfig.xml>
<strutsconfigxml
validateXML="true"
version="1.2">
</strutsconfigxml>
</webdoclet>
</target>

Ilfaut:

Dclarer la tche webdoclet via taskdef, en lui spcifiant la classe:


xdoclet.modules.web.WebDocletTaskutiliser.Vousdevezdoncspcifierunclasspath
validecontenantlaclasseprcdente(inclusedanslesjarsXDoclet).

Appeler la tche webdoclet en lui spcifiant le rpertoire de destination (destdir), les


fichiers parser (via un fileset), et la soustche strutsconfigxml qui permet de
gnrerlefichierstrutsconfig.xml.

Vouspouvezgalementutiliserlessoustchessuivantes:

strutsdynaformvalidationxml:pourlagnrationdesparamtragesdevosdynaform.

strutsvalidationxml:pourlagnrationdufichiervalidation.xml

Vouspouvezavoirplusdedtailssurlutilisationdechacunedecestchesladressesuivante:
http://xdoclet.sourceforge.net/xdoclet/ant/xdoclet/modules/web/WebDocletTask.html.

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

55/57

7.Casconcret(architecture)
7.1.Prsentation
Nousallonsprsentprendreuncasconcretdapplicationetvoirlesdiffrentestapesauniveau
delamodlisationdelapplication.Nousallonsprendrelexempledunegestiondunportefeuille
dactions
Casdutilisation????

7.2.Architecture

7.3.Couchemtier

7.3.1.Couchedaccsauxdonnes(DAO)

7.3.2.Coucheservice

7.4.Coucheapplication

7.4.1.Action

7.4.1.1.ActionForm

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

FrameworkStrutsModleMVC

7.4.2.Forwards

7.4.3.Exceptions

7.5.Coucheprsentation

7.5.1.Tiles

7.5.1.1.Dfinitions

7.5.1.2.Jsp(layoutsettiles)

7.5.2.Formulaires

7.5.3.Messagesderreur(MessageApplication)

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs

56/57

FrameworkStrutsModleMVC

57/57

8.LavenirdeStruts
8.1.IntgrationavecJSTL
EnadoptantJSP1.2,lesdiffrentsserveursdapplicationspeuventexploitertoutelefficacitde
JSTL(JavaStandardTagLibrary).LeprincipaleffetsurStrutsseradefournirunesolutionde
rechange la bibliothque de balises de Struts beaucoup plus puissante et capable
dinteroprabilitaveclesplatesformesnonStruts.
Enconsquence,onpeutsattendreprogressivementunedvalorisationdesbalisesStruts.

8.2.IntgrationavecJSF
LauteurdeStruts:CraigMcClanahanestfortementimpliqudanslesspcificationsdesJSF
(JavaServerFaces).StrutsetJSFserontdoncprobablementbientttroitementlis.
UnefoisdepluslintrtpourlesbalisesStrutssestomperapourcelledeJSF(toujoursdanslebut
davoirunstandard).

8.3.AdoptiongnralisedeStruts
StrutsestdevenurapidementtrspopulairedanslacommunautdedveloppementJavaJ2EE.
IBM,OraclesontdebonsexemplesdeleaderayantchoisitStrutsdansleuroutildedveloppement
dapplicationWeb.
Findudocument

http://www.labosun.com
CedocumentestlapropritdeSupinfoetestsoumisauxrglesdedroitsdauteurs