Vous êtes sur la page 1sur 65

Java pour le dveloppement dapplications Web : Java EE

Struts
Mickal BARON - 2006 (Rev. Aot 2009) mailto:baron.mickael@gmail.com ou mailto:baron@ensma.fr

Licence

Creative Commons
Contrat Paternit Partage des Conditions Initiales l'Identique
2.0 France

keulkeul.blogspot.com

http://creativecommons.org/licenses/by-sa/2.0/fr
Struts - M. Baron - Page 2

Droulement du cours Struts Pdagogie du cours


Illustration avec de nombreux exemples Des bulles daide tout au long du cours Ceci est une alerte

Ceci est une astuce

Pr-requis
keulkeul.blogspot.com

Connaissance de Java Connaissance des fondements du WEB (HTML, HTTP) Connaissance des technologies fondatrices de Java EE (Servlet, JSP, balises personnalises)
Struts - M. Baron - Page 3

Struts : quest-ce-que cest ... La bibliothque Struts est un framework qui permet de construire des applications Web respectant le modle darchitecture MVC Cest une bibliothque qui fournit le minimum de rgles pour construire une application Web professionnelle (sparation des mtiers et donc des comptences) Struts est un projet soutenu par lApache Software Foundation. Site de rfrence struts.apache.org
keulkeul.blogspot.com

Logique de fonctionnement
la structure de lapplication Web est dcrite dans struts-config.xml lutilisation de Servlets est transparente via des classes adaptes les pages JSP exploitent des balises personnalises de Struts. Il est conseill dutiliser en parallle la bibliothque JSTLStruts - M. Baron - Page

Struts : utile ou pas ? Struts est un framework assez lourd pour une simple application (un formulaire et une rponse par exemple) Il introduit un niveau de complexit et de mise en route importants et les bnfices de son utilisation se font ressentir ds lors que lapplication prends de limportance Sur le Web de nombreuses formations quant son utilisation,
keulkeul.blogspot.com

montrent son importance dans les projets industriels Une bibliothque est en passe de supplanter Struts : Java Server Faces (JSF) mais trop rcente et pas assez mre pour en discuter dans ce cours ( vrifier )
Struts - M. Baron - Page 5

Struts : documentation ... De nombreuses ressources sont disponibles concernant Struts


La FAQ de Developpez.com : java.developpez.com/faq/struts Struts par lexemple : taha.developpez.com Jakarta Struts - prcis & consis (OReilly), ...

Les nombreuses ressources prsentent principalement la version 1.1 de la bibliothque de Struts (incompatibilit avec la 1.2) Tlchargement de Struts struts.apache.org/download.cgi
keulkeul.blogspot.com

Prsentation base sur un exemple


un formulaire qui demande la saisie dun nom et dun age contraintes dintgrit : prsence des paramtres, age est un entier positif diffrentes vues : erreurs, formulaire, validation
Struts - M. Baron - Page 6

Struts : principe gnrique de la mthode


Le client envoie une requte au contrleur
Client WEB

struts-config.xml struts-config.xml
Configuration 2

Le contrleur traite la requte du client ActionForm ActionForm


Fichiers Java

Non tudi dans ce cours

EJB EJB
Fichiers Java

ActionServlet ActionServlet
Fichiers Java

Le client reoit la prsentation issue de la vue 6

4 Contrleur

La vue est choisie et paramtre selon ltat du contrleur

Accs Donnes Accs Donnes Action Action


Fichiers Java 3 Fichiers Java Modle

keulkeul.blogspot.com

page.jsp page.jsp JSTL JSTL Struts Struts


Biblio. Perso. Fichiers JSP

Gnration de la Sauvegarde les informations des 5 page JSP en HTML


formulaires

properties.fr properties.fr properties.en properties.en


Ressources

SGBD (mySQL, Oracle, )

Vue

Struts - M. Baron - Page 7

Struts : principe gnrique de la mthode : Contrleur Le contrleur est le cur de lapplication Web. Toutes les demandes du client transitent par lui Il est dfini par une Servlet gnrique de type ActionServlet fournie par lAPI de Struts Le contrleur prend les informations dont il a besoin dans le fichier struts-config.xml Si la requte du client contient des paramtres, ceux-ci sont
keulkeul.blogspot.com

transmis dans un objet de type ActionForm Selon ltat retourn par lActionForm prcdent, le contrleur traite une action spcifique par un objet de type

Action

Struts - M. Baron - Page 8

Struts : intgration dans lapplication web De manire intgrer le framework Struts dans une application Web, il est ncessaire denrichir le fichier web.xml Par principe le contrleur Struts est atteint par toutes les URLs se terminant par le suffixe .do
... <servlet> Servlet gnrique ActionServlet <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> En paramtre de la Servlet le <servlet-mapping> fichier struts-config.xml <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> Possibilit de dfinir ...

Le contrleur est dfini par la

keulkeul.blogspot.com

Toute URL terminant par .do est traite par le contrleur

plusieurs ActionServlet pour une mme application Web

Struts - M. Baron - Page 9

Struts : le fichier configuration struts-config.xml Le fichier grant la logique de lapplication Web sappelle par dfaut struts-config.xml

web.xml

Il est plac dans le rpertoire WEB-INF au mme niveau que Il dcrit essentiellement trois lments
les objets Bean associs aux formulaires JSP (ActionForm) les actions raliser suite aux rsultats des objets ActionForm (Action) les ressources ventuelles suites des messages

keulkeul.blogspot.com

Le fichier de configuration est un fichier XML dcrit par une DTD. La balise de dpart est <struts-config>
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> ... </struts-config>

Description de fonctionnement de larchitecture de lapplication Web


Struts - M. Baron - Page 10

Struts : Action Une action est un traitement obtenu suite au passage de la requte au contrleur Nous distinguons deux sortes de requte client
requte sans paramtre issue par exemple dune re-direction requte avec paramtres issue par exemple dun formulaire

Les actions sont dcrites dans la balise <action-mappings>


keulkeul.blogspot.com

au moyen de la balise <action> Selon le type de requte (avec ou sans paramtre) diffrents attributs de la balise <action> sont renseigner
Struts - M. Baron - Page 11

Struts : Action Dans le cas dune requte sans paramtre le rle du contrleur est de relayer la demande du client une URL La balise <action> dispose alors des attributs suivants
String path : dfinit le nom de lURL (suffixe .do implicite) String type : dfinit le nom de la classe Action qui doit traiter la demande. Utilisez la classe org.apache.struts.actions.ForwardAction
dans ce cas prcis de re-direction

String parameter : le nom de lURL qui doit tre relaye la demande


<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> Quand le client transmet lURL <action-mappings> .../monnom.do au contrleur celui-ci <action path="/monnom" redirige vers /vues/mapage.jsp parameter="/vues/mapage.jsp" type="org.apache.struts.actions.ForwardAction" /> </action-mappings> </struts-config> Il sagit dune re-direction

keulkeul.blogspot.com

Struts - M. Baron - Page 12

Struts : Action pisode 1 : appel du formulaire de saisie du nom et de lage


<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <action-mappings> <action path="/formulaire" parameter="/vues/formulaire.jsp" type="org.apache.struts.actions.ForwardAction" /> </action-mappings> </struts-config>

Le formulaire est dfini dans la page formulaire.jsp

Le client envoie la requte suivante


keulkeul.blogspot.com

Cest la page formulaire.jsp qui est retourne au client


Struts - M. Baron - Page 13

Struts : Action Dans le cas dune requte avec paramtres le rle du contrleur est double
transmettre les informations dans un objet Bean de type ActionForm raliser une action spcifique (autre quune simple redirection)

La balise <action> dispose, en plus des attributs dj tudis, des attributs suivants
String scope : les valeurs du formulaire sont stockes en session String name : rfrence le nom dune section <form-bean>
keulkeul.blogspot.com

(voir ci-aprs)

String validate : indique si la mthode validate de lobjet ActionForm


doit tre appele ou non (voir ci-aprs)

String input : indique la vue qui sera appele sil y a erreur dans lobjet ActionForm Struts - M. Baron - Page 14

Struts : Action Les formulaires sont dclars dans la balise <form-beans> au moyen de la balise <form-bean> La balise <form-bean> possde les attributs suivants
String name : nom du formulaire de la page JSP String type : classe ActionForm qui stocke les paramtres du Bean
<?xml version="1.0" encoding="ISO-8859-1"?> ... <struts-config> <form-beans> <form-bean name="monformulaire" type="monpackage.ClassActionForm" /> </form-beans> <action-mappings> Quand le client transmet lURL <action .../monnom.do au contrleur path="/monnom" name="monformulaire" celui-ci redirige vers scope="session" /vues/mapage.jsp si aucun problme validate="true" input="/pageerreurs.do" parameter="/vues/mapage.jsp" type="org.apache.struts.actions.ForwardAction" /> </action-mappings> </struts-config>

keulkeul.blogspot.com

Dans le cas o les paramtres sont mauvais le contrleur redirige vers /pageerreurs.do

Struts - M. Baron - Page 15

Struts : Action pisode 2 : envoie dune requte de type POST du formulaire


Trois actions et un formulaire sont actuellement dfinis
Le formulaire est dfini par la valeur formPersonne

... <struts-config> <form-beans> <form-bean name="formPersonne" type="monpackage.FormulaireBean" /> </form-bean>

keulkeul.blogspot.com

<action-mappings> monpackage.FormulaireBean <action path="/main" name="formPersonne" scope="session" validate="true" input="/erreurs.do" parameter="/vues/main.jsp" type="org.apache.struts.actions.ForwardAction " /> <action Si les donnes sont path="/formulaire" parameter="/vues/formulaire.jsp" correctes direction type="org.apache.struts.actions.ForwardAction" /> /vues/main.jsp <action sinon direction path="/erreurs" parameter="/vues/erreurs.jsp" /erreurs.do type="org.apache.struts.actions.ForwardAction" /> </action-mappings> </struts-config>

Les valeurs sont stockes dans

Struts - M. Baron - Page 16

Struts : Action pisode 2 (suite) : envoie dune requte issue du formulaire


<%@ taglib uri="htmlstruts" prefix="html" %> Bibliothque de balises ... personnalises Struts:HTML <body> <center> <h2>Personne - Formulaire</h2><hr> Laction du formulaire est dappeler <html:form action="/main" > la ressource /main associe <table> <tr> <td>Nom</td> <td><html:text property="nom" size="20" /></td> </tr> <tr> <td>Age</td> <td><html:text property="age" size="3"/></td> Les deux paramtres </tr> transmis en paramtre de la </table> <table> requte <tr> <td><html:submit value="Envoyer" /></td> <td><html:reset value="Retablir" /></td> <td><html:button property="btnEffacer" value="Effacer" onclick="effacer()"/></td> </tr> </table> </html:form> ... Nous reviendrons plus tard

keulkeul.blogspot.com

sur la comprhension de la bibliothque struts-html

Struts - M. Baron - Page 17

Struts : ActionForm Lobjectif dun objet de type ActionForm est de stocker les informations issues dun formulaire Les objets de type ActionForm sont construits comme un objet Bean : utilisation du principe de la rflexivit La classe Bean devra donc hriter de la classe ActionForm du package org.apache.struts.action Cest le contrleur via la Servlet qui se charge de crer les instances des objets de type ActionForm
keulkeul.blogspot.com

Pour chaque proprit, le Bean doit dfinir un attribut et deux mthodes


un modifieur pour affecter une valeur lattribut un accesseur pour obtenir la valeur de lattribut correspondant
Linstanciation dun objet de type ActionForm est implicite. Linformation est donne dans struts-config.xml

Struts - M. Baron - Page 18

Struts : ActionForm Hormis le but de stocker les proprits des formulaires, les objets de type ActionForm soccupent aussi de laspect smantique des donnes La mthode validate soccupe de vrifier la validit des attributs de lobjet Bean

ActionErrors validate(ActionMapping, HttpServletRequest)


le paramtre ActionMapping est un objet image de la configuration de laction en cours stocke dans struts-config.xml le paramtre HttpServletRequest est la requte du client transmise par la Servlet de contrle
keulkeul.blogspot.com

le retour ActionErrors permet de retourner des messages erreurs au client

La classe ActionForm dispose galement dautres mthodes


ActionServlet getServlet() : retourne la Servlet qui gre le contrle reset(ActionMapping, HttpServletRequest) : initialise les proprits
Struts - M. Baron - Page 19

Struts : ActionForm Un objet de type ActionMapping permet dextraire les informations contenu dans le fichier struts-config.xml Il possde des mthodes associes
... <action path="/main" name="formPersonne" scope="session" validate="true" input="/erreurs.do" parameter="/vues/main.jsp" type="org.apache.struts.actions.ForwardAction " /> ...

String getType() : pour accder au contenu de lattribut type String getInput() : pour accder au contenu de lattribut input
keulkeul.blogspot.com

Un objet ActionErrors permet dajouter des erreurs et lajout se fait par la mthode
add(String, ActionMessage) : o le premier paramtre correspond la
cl et le second au message derreur
Struts - M. Baron - Page 20

Struts : ActionForm pisode 3 : stocker les informations du formulaire


public class FormulaireBean extends ActionForm { private String nom = null; private String age = null; public String getNom() { return nom; }

Les deux attributs modlisant les proprits public void setNom(String nom){ du Bean
this.nom = nom; } public void setAge(String age) { this.age = age; } public String getAge() { return age; } ... }

La classe du framework Struts qui gre les Beans associs aux formulaires

keulkeul.blogspot.com

Les modifieurs et accesseurs pour traiter et modifier les proprits

Struts - M. Baron - Page 21

Struts : ActionForm pisode 3 (suite) : stocker et valider les info. du formulaire


public class FormulaireBean extends ActionForm { ... // Li la modlisation des proprits public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) { ActionErrors erreurs = new ActionErrors(); if (nom == null || nom.trim().equals("")) { Au dbut erreurs.add("nomvide", new ActionMessage("formulaire.nom.vide")); erreurs est vide } donc pas if (age == null || age.trim().equals("")) { erreurs.add("agevide", new ActionMessage("formulaire.age.vide")); derreur } else { try { int mon_age_int = Integer.parseInt(age); if (mon_age_int < 0) { erreurs.add("ageincorrect", Ajout des erreurs new ActionMessage("formulaire.age.incorrect")); selon larrivage } } catch (Exception e) { erreurs.add("ageincorrect", new ActionMessage("formulaire.age.incorrect",age)); } } return erreurs; }

keulkeul.blogspot.com

Depuis la nouvelle version 1.2, il faut utiliser ActionMessage et non ActionError (dsapprouve)

Struts - M. Baron - Page 22

Struts : ActionForm et ActionErrors Les messages derreurs stocks dans un objet ActionErrors et retourns par la mthode validate sont transmis au contrleur Si validate vaut true et que lobjet ActionErrors nest pas null le contrleur redirige vers la vue de lattribut input
... <action path="/main" name="formPersonne" scope="session" validate="true" input="/erreurs.do" parameter="/vues/main.jsp" type="org.apache.struts.actions.ForwardAction " /> ...

Les erreurs sont affiches dans la vue JSP au moyen de la balise personnalise <errors> de la bibliothque Struts-HTML
keulkeul.blogspot.com
<%@ taglib uri="htmlstruts" prefix="html" %> <html:errors/>

La balise <errors> naffiche pas les messages mais des identifiants prsents dans un fichier ressource qui doit tre rfrenc dans struts-config.xml

Struts - M. Baron - Page 23

Struts : ActionForm et ActionErrors Pour dclarer un fichier ressource dans le fichier configuration struts-config.xml utiliser la balise <message-resources>
String parameter : nom du fichier ressource boolean null : true affiche null, false affiche ???key??? struts-config.xml String key : utiliser quand il y a plusieurs fichiers ressources
De prfrence la fin du fichier

Le fichier ressource doit porter comme extension .properties


Exemple de fichier : toto.properties

keulkeul.blogspot.com

Le fichier ressource doit tre placer obligatoirement dans un sous-rpertoire de /WEB-INF/classes. Exemples :
/WEB-INF/classes/toto.properties /WEB-INF/classes/
Les fichiers ressources sont obligatoires quand vous utilisez la balise <errors> dans une page JSP

Pour choisir le fichier ressource, utilisez lattribut bundle dans la balise <errors> en indiquant le nom de la cl
Struts - M. Baron - Page 24

Struts : ActionForm et ActionErrors


Fichier ... <message-resources parameter="erreur" null="false" key="erreur" /> erreur.properties <message-resources parameter="classique" null="false" key="classique" /> </struts-config> formulaire.nom.vide=<li>Vous devez indiquer un nom</li> formulaire.age.vide=<li>Vous devez indiquer un age</li> formulaire.age.incorrect=<li>L'age [{0}] est incorrect</li> errors.header=<ul> errors.footer=</ul> <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<html> <head> <title>Personne</title> </head> <body> <h2>Les erreurs suivantes se sont produites</h2> <html:errors bundle="erreur" /> <html:link page="/formulaire.do"> Retour au formulaire </html:link> </body> </html>

pisode 4 : grer les erreurs smantiques du formulaire

keulkeul.blogspot.com

Emplacement des fichiers properties

Struts - M. Baron - Page 25

Struts : Action Nous avons pour linstant utilis simplement la classe

ForwardAction qui ne permet que de traiter des re-directions


sans de rels traitements mtiers
... <action path="/main" name="formPersonne" scope="session" validate="true" input="/erreurs.do" parameter="/vues/main.jsp" type="org.apache.struts.actions.ForwardAction " /> ...

De manire pouvoir raliser des actions plus complexes (modification du modle, cration de nouveaux Bean, )
keulkeul.blogspot.com

nous drivons explicitement la classe Action Cette classe possde la mthode execute appele par le constructeur de lapplication Web si aucune erreur ne sest produite
Struts - M. Baron - Page 26

Struts : Action

ActionForward execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse)


le paramtre ActionMapping est un objet image de la configuration de laction en cours stocke dans struts-config.xml le paramtre ActionForm correspond au Bean qui stocke linformation du formulaire le paramtre HttpServletRequest est la rfrence de la requte le paramtre HttpServletResponse est la rfrence de la rponse le retour ActionForward est un objet pour identifier la destination prochaine que le contrleur choisira

keulkeul.blogspot.com

Il faut modifier galement struts-config.xml en ajoutant au corps de la balise <action> la balise <forward>
String name : tiquette pour la re-direction String path : chemin de re-direction
Struts - M. Baron - Page 27

Struts : Action pisode 5 : amliorer le traitement des actions du contrleur


public class FormulaireAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { FormulaireBean formulaire = (FormulaireBean)form; req.setAttribute("nom", formulaire.getNom()); req.setAttribute("age", formulaire.getAge()); return mapping.findForward("response"); } }

Grce au paramtre ActionForm on a accs au contenu du Bean

Lobjet requte de la Servlet est modifi en ajoutant deux attributs issus du Bean
keulkeul.blogspot.com

On indique ici que la prochaine re-direction se fera dans response Ajout dans le corps de cette action de la balise <forward>

... <action path="/main" name="formPersonne" scope="session" validate="true" input="/erreurs.do" parameter="/vues/main.jsp" type="monpackage.FormulaireAction"> <forward name="response" path="/reponse.do" /> </action> ...

Ltiquette response indique une nouvelle page cible

Struts - M. Baron - Page 28

Struts : Action pisode 5 (suite) : rponse positive


<%@ taglib uri="htmlstruts" prefix="html" %> <html> <head> <title>Personne</title> </head> <body> <h2>Personne - Reponse</h2><hr> <table> <tr> <td>Nom</td><td>${nom} </tr> <tr> <td>Age</td><td>${age} </tr> </table> <br> <html:link page="/formulaire.do"> Retour au formulaire </html:link> </body> </html>

Utilisation des EL dans la page JSP puisque deux attributs ont t dfinis dans la classe FormulaireAction (scope = request)

keulkeul.blogspot.com

La balise <link> permet de retourner facilement un lien hypertexte


Struts - M. Baron - Page 29

Struts : DynaActionForm Les objets ActionForm sont des Beans qui permettent de stocker des proprits statiques et de les valider Un constat
les valeurs dun formulaire sont des chanes de caractres : String pour les valeurs uniques et String[] pour les valeurs champs multiples il faut redfinir chaque fois des get et des set pour les proprits

La solution est dutiliser des formulaires


keulkeul.blogspot.com

dont la structure est dclare dans le fichier struts-config.xml qui sont crs dynamiquement par lenvironnement Struts

Ralisation
utilisation de la classe DynaActionForm modification de la balise <form-bean>
Struts - M. Baron - Page 30

Struts : DynaActionForm La classe DynaActionForm possde la mme mthode validate que ActionForm cependant laccs aux attributs se fait par un objet Map Utiliser les mthodes suivantes
paramtre
String ma_propriete = (String)this.get("nom");

Ne pas oublier de Caster lobjet en retour

Object get(String) : retourne la valeur de la proprit donne en

void set(String, Object) : modifie la valeur de la proprit donne en


paramtre
keulkeul.blogspot.com

Pour chaque champ du formulaire on dfinit une balise <form-property> dans le corps de la balise <form-bean>
<form-bean name="nomFormulaire" type="package.DynaForm" > <form-property name="toto" type="java.lang.String" /> <form-property name="tutu" type="java.lang.String" /> </form-bean>

Deux proprits dfinies dans le formulaire nomFormulaire trait par le Bean DynaForm
Struts - M. Baron - Page 31

Struts : DynaActionForm pisode 6 : utilisation dun Bean dynamique


Le Bean dynamique

public class PersonneDynaActionForm extends DynaActionForm { public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) { ActionErrors erreurs = new ActionErrors(); String nom = (String)this.get("nom"); String age = (String)this.get("age"); if (nom == null || nom.trim().equals("")) { erreurs.add("nomvide", new ActionMessage("formulaire.nom.vide")); } if (age == null || age.trim().equals("")) { erreurs.add("agevide", new ActionMessage("formulaire.age.vide")); } else { ... } return erreurs; Le reste du code est identique au code } } fourni par lActionForm prcdente

Chaque proprit est extraite par un identifiant

keulkeul.blogspot.com

<struts-config> <form-beans> <form-bean name="formPersonne" type="monpackage.PersonneDynaActionForm" > <form-property name="age" type="java.lang.String" initial="" /> <form-property name="nom" type="java.lang.String" initial="" /> </form-bean> </form-beans> <action-mappings> ...

Dclaration des deux proprits

Le fichier struts-config.xml

Struts - M. Baron - Page 32

Struts : DynaActionForm pisode 6 (suite) : utilisation dun Bean dynamique

public class FormulaireAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { PersonneDynaActionForm formulaire = (PersonneDynaActionForm)form; req.setAttribute("nom", formulaire.get("nom")); req.setAttribute("age", formulaire.get("age")); return mapping.findForward("response"); } } keulkeul.blogspot.com

Il faut modifier en consquence laction associe

Cette solution offre lavantage de dcrire la structure du Bean par une description XML
Struts - M. Baron - Page 33

Struts : Validator : des constats ... En utilisant la solution DynaActionForm nous sommes encore obligs dcrire le code Java correspondant aux contraintes dintgrit La validation des donnes se fait uniquement ct serveur Deux types de validation
validation de contrle de surface (prsence ou pas de donnes, donnes numriques contenant ou pas de lettres ?)
keulkeul.blogspot.com

validation smantique (numro de carte bleue valide ?)

Technologies couramment employes pour la validation


validation de contrle de surface par JavaScript ct client validation smantique ct Serveur
Struts - M. Baron - Page 34

Struts : Validator : et une solution Constats


La vrification ct client est longue, explicitement non performante car longue dbuguer et ncessite lapprentissage du langage JavaScript La vrification de surface na pas lieu dtre ralise sur le serveur La solution par un Bean ActionForm et par la mthode validate est rptitive car aucune aide la vrification

Solution : utiliser le plug-in Validator


keulkeul.blogspot.com

Permet de dcrire des contraintes dintgrit directement dans un fichier XML Permet de valider les donnes ct client sans crire la moindre ligne de JavaScript
Struts - M. Baron - Page 35

Struts : Validator : Dploiement Le plug-in Validator doit tre ajout dans lapplication Web
Ajouter au rpertoire bibliothque de votre application commons-validator.jar et jakarta-oro.jar Ajouter le fichier validator-rules.xml dfinissant les contraintes dintgrit standard dans le rpertoire /WEB-INF

Ajouter la balise <plug-in> dans le fichier struts-config.xml qui sert charger la classe externe Validator Struts
String classname : indique le nom de la classe instancier La balise <set-property> est utiliser pour initialiser la classe String property : le nom de la proprit initialiser String value : la valeur de la proprit

keulkeul.blogspot.com

Pour notre utilisation <value> doit renseigner deux infos


le fichier validator-rules.xml (ne pas modifier) le fichier dfinissant les contraintes dintgrit des diffrents formulaires construit par le concepteur Struts - M. Baron - Page 36

Struts : Validator : Dploiement Prciser dans la balise <form-bean> que lActionForm est dfinie par org.apache.struts.validator.DynaValidatorForm Prciser galement les paramtres prsents dans le formulaire comme pour DynaActionForm dans la balise <form-property>
String name : le nom du champ String type : son type Java
Dans le fichier struts-config.xml seulement deux modifications Pour dire que les paramtres sont grs dynamiquement et par

Validator

keulkeul.blogspot.com

<form-beans> <form-bean name="nomFormulaire" type="org.apache.struts.validator.DynaValidatorForm" > <form-property name="toto" type="java.lang.String" /> <form-property name="tutu" type="java.lang.String" /> </form-bean> ... <plug-in className="org.apache.struts.validator.ValidatorPlugIn" > <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in> </struts-config>

Ce nom de fichier pour la validation explicite des contraintes nest pas fix

Struts - M. Baron - Page 37

Struts : Validator : criture des contraintes dintgrit Les contraintes dintgrit sont dfinies explicitement dans un fichier xml (ici validation.xml) Le fichier dcrit en deux parties des rgles dintgrit qui se trouvent dans la balise <form-validation>
<global> : informations porte globale, valable dans tous les
formulaires

<formset> : dfinit lensemble des formulaires pour lesquels il y a des


contraintes dintgrit
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons ... Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <global> ... </global> <formset> ... </formset> </form-validation>

keulkeul.blogspot.com

Informations globales la description Description de lensemble des formulaires


Struts - M. Baron - Page 38

Struts : Validator : criture des contraintes dintgrit Dans la balise <global> on peut dfinir des constantes utilises dans les autres descriptions des formulaires
<constant-name> : nom de la constante <constant-value> : contient la valeur de la constante
Description dune constante
keulkeul.blogspot.com
... <global> <constant-name>...</constant-name> <constant-value>...</constant-value> </global> ...

Valeur dune constante

Les contraintes dintgrit de chaque paramtre du formulaire sont dfinies par des expressions rgulires (peut-tre dclares
dans la balise globale comme constante)
Struts - M. Baron - Page 39

Struts : Validator : Expression Rgulire Rappel : une expression rgulire permet de trouver plusieurs mots ou phrases qui sont proches (hydro => hydrocarbure, hydrofuge, ) On ne vrifie ici pas le contenu des paramtres (effectu dans la classe Action) mais la forme (chiffre avec des lettres, Elles sont bases sur des caractres spcifiques ayant chacun une importance Nous trouvons trois types de caractres
keulkeul.blogspot.com

caractres interdits, ...)

mta-caractres : ^, ., ?, *, + et le $ groupe de caractres : \d, \D, \w, \W, \s, \S, \b, \B et \nnn autres mta-caractres : {m,n}, |, []
Les expressions rgulires sont puissantes et sont souvent utilises dans les langages de Scripts (Perl, shell bash, )

Struts - M. Baron - Page 40

Struts : Validator : Expression Rgulire : Mta-caractres Le point . : reprsente nimporte quel caractre
123.5 => 123.5, 12345, 123t5, 123 5, ...

Le point dinterrogation ? : le caractre prcdent ? Le caractre \ est utilis comme est optionnel
12?45 => 145, 1245
chappement. Pour chercher . on utilisera \. , ...

Ltoile * : le caractre prcdent * peut tre rpt 0 ou plusieurs fois


12*45 => 145, 122245

keulkeul.blogspot.com

Le plus + : le caractre prcdent + peut tre rpt 1 ou plusieurs fois


12+34 => 12234, 12222234

Le dollar $ et le chapeau ^ : caractre en fin et dbut de ligne


^toto$ => ligne finissant par toto et commenantStruts -toto par M. Baron - Page
41

Struts : Validator : Expression Rgulire : Groupe de caractres \d : tout caractre numrique : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 \D : tout caractre sauf numrique \w : une lettre, une lettre accentue, un chiffre ou _ \W : tout caractre sauf une lettre, accentue, un chiffre ou _ \s : espace, tabulation, saut de ligne, ou tout autre caractre non imprimable
keulkeul.blogspot.com

\S : tout caractre sauf ceux dfinis par \s \b : espace, ponctuation, le dbut du texte du texte, fin du texte \B : le contraire de \b
Struts - M. Baron - Page 42

Struts : Validator : Expression Rgulire : autre mta-caractres Accolades {n,m} : les accolades agissent comme ltoile, litration est comprise entre n et m Alternative | : a | b => a or b Occurrence [abc] : 1 lettre au choix parmi trois Occurrence [a-z], [g-j], [a-zA-Z] : lettre comprise entre ... Occurrence [0-9], [6-9] : chiffre compris entre
keulkeul.blogspot.com

Occurrence [abc-], [a-z-] : toute lettre comprise entre et - Occurrence [^abc], [^a-d] : toute lettre sauf ...
Le caractre ^ associ une occurrence dsigne un complment
Struts - M. Baron - Page 43

Struts : Validator : Expression Rgulire : exemples a\.*z => az, a.z, a..z, a..z, ... a\+\+z => a+z, a+++++z, a+++++++++++z, ... a\.?e => ae, a.e et rien dautre a\Dz => aaZ, a%z, abz mais ne trouvera pas a2z, a5z l\.\d\d\d4 => 1.4544, 1.8884, 1.3254, \D+ : toute chane de caractre non nulle sans caractres a{1,3} => a, aa, aaa et rien d autre a.{2,2}z => abrz, avbz, a23z
keulkeul.blogspot.com

a|b => a, b (a|b)+ => a, b, ab, ba, abab [\[\\\]]abc => [abc, \abc, ]abc java[4-8] => java4, java5, , java8
Struts - M. Baron - Page 44

Struts : Validator : criture des contraintes dintgrit Pour chaque formulaire dcrit dans la balise <form> il faut prciser les contraintes dintgrit des paramtres

<form>

Le nom du formulaire est indiqu dans lattribut name de

Une balise <form> contient autant de balises <field> que de paramtres du formulaire
String property : nom du champ du formulaire pour lequel des
contraintes dintgrit sont dfinies

String depends : liste des contraintes dintgrit vrifier


... <form name="..." > <field property="..." depends="..." > ... </field> ... </form> <form name="..." > ... </form> ...

keulkeul.blogspot.com

Description de deux formulaires

Renseignements donns concernant les diffrents paramtres du formulaire


Struts - M. Baron - Page 45

Struts : Validator : criture des contraintes dintgrit Lattribut depends peut prendre les valeurs suivantes
required : champ ne doit pas tre vide mask : le champ doit correspondre une ExpReg dfinie par mask integer : champ doit tre un entier byte, long, float, double, email, date, range, ...

Possibilit de mettre plusieurs valeurs dans lattribut depends Les contraintes sont vrifies dans lordre de lattribut depends. Si une contrainte nest pas vrifie, les suivantes ne le sont pas
keulkeul.blogspot.com
... <field property="prop1" depends="required, mask" > ... </field> ...

La proprit prop1 est obligatoire et doit correspondre une ExpReg

Struts - M. Baron - Page 46

Struts : Validator : criture des contraintes dintgrit Lexpression rgulire associe la variable mask est renseigne par la sous balise <var> de la balise <field> La balise <var> possde les sous balises suivantes
<var-name> : nom de la variable modifier <var-value> : valeur de la variable
Modification de la variable mask
...

keulkeul.blogspot.com

<field property="prop1" depends="required, mask" > <var-name>mask</var-name> <var-value>^\s*\d+\s*$</var-value> </field> ...

Utilisation dune expression rgulire qui exprime que seuls des chiffres prcds et suivis despace sont autoriss

Struts - M. Baron - Page 47

Struts : Validator : criture des contraintes dintgrit Chaque contrainte est lie un message derreur dfini par une cl et dont le contenu est initialis dans les fichiers properties
errors.required : message li la contrainte required errors.invalid : message li la contrainte mask errors.email : message lie la contrainte email

Possibilit dajouter des arguments au moyen de <argi>


i est un variant allant de 0 3 String key : message retourner
keulkeul.blogspot.com

Largument arg0 sera utilis dans le retour des messages

<field property="prop1" depends="required, mask" > <arg0 key="mypropriete" /> </field>

Les messages derreurs sont dj dfinis (en anglais) dans le Fichier validator-rules.xml par dfaut fichier validator-rules.xml
errors.required={0} is required. errors.invalid={0} is invalid. errors.email={0} is an invalid e-mail adress

Argument utilis dans le message


Struts - M. Baron - Page 48

Struts : Validator : criture des contraintes dintgrit pisode 7 : utilisation dun Bean Validator dynamique
... <form-beans> <form-bean name="formPeronne" type="org.apache.struts.validator.DynaValidatorForm" > <form-property name="nom" type="java.lang.String" /> <form-property name="age" type="java.lang.String" /> Utilisation de la classe </form-bean> DynaValidatorForm de Struts ...

<action path="/main" name="formPersonne" scope="session" validate="true" input="/erreurs.do" parameter="/vues/main.html" type="monpackage.FormulaireAction"> ... Validation des donnes du </action>

formulaire ct serveur active

<plug-in className="org.apache.struts.validator.ValidatorPlugIn" > <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in> </struts-config>

keulkeul.blogspot.com

... <html:form action="/main" > <table> <tr><td>Nom</td><td><html:text property="nom" size="20" /></td></tr> <tr><td>Age</td><td><html:text property="age" size="3"/></td></tr> </table> <table> <tr>...</tr> </table> </html:form> ...

Le formulaire JSP ne change pas

Struts - M. Baron - Page 49

Struts : Validator : criture des contraintes dintgrit pisode 7 (suite) : utilisation dun Bean Validator dynamique
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons ... Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> Dfinition dune contrainte <global> dintgrit dans une constante <constant> <constant-name>entierpositif</constant-name> <constant-value>^\s*\d+\s*$</constant-value> </constant> Le paramtre nom est </global> <formset> obligatoire <form name="formPersonne3"> <field property="nom" depends="required"> <arg0 key="personne.nom"/> </field> <field property="age" depends="required,mask"> Le paramtre age est <arg0 key="personne.age"/> <var> obligatoire et doit <var-name>mask</var-name> respecter lexpression <var-value>${entierpositif}</var-value> rgulire dfinie par </var> </field> entierpositif </form> </formset> </form-validation>

keulkeul.blogspot.com

Fichier de validation.xml

Struts - M. Baron - Page 50

Struts : Validator : criture des contraintes dintgrit pisode 7 (suite bis) : utilisation dun Bean Validator
# Pour les messages derreurs davant Validator formulaire.nom.vide=<li>Vous devez indiquer un nom</li> formulaire.age.vide=<li>Vous devez indiquer un age</li> formulaire.age.incorrect=<li>L'age [{0}] est incorrect</li> errors.header=<ul> errors.footer=</ul> # Pour la validation des donnes avec Validator personne.nom=nom {0} est remplac par age. personne.age=age errors.invalid={0} est invalide. errors.required={0} est obligatoire.

Fichier de properties_fr

Dfini dans arg0 de validator.xml

keulkeul.blogspot.com

Lge est invalide car il contient du texte Le message errors.invalid est utilis dans le fichier properties
Struts - M. Baron - Page 51

Struts : Validator : criture des contraintes dintgrit Nous avons vu pour linstant que la vrification des donnes se faisait essentiellement ct serveur Struts et le plug-in Validator offre la possibilit de renforcer la vrification en amont ct client en gnrant automatiquement le JavaScript Le JavaScript gnr correspond la description donne dans le fichier de contraintes dintgrit Deux choses doivent tre renseignes dans la JSP du formulaire
keulkeul.blogspot.com

Dans la balise <form> il faut initialiser lattribut onsubmit = "return validateFormPersonne(this)" si le nom du form. est FormPersonne Ajouter la balise <javascript> dont lattribut formName prend la valeur "formPersonne"
Deux vrifications de surface des donnes sont ralises. Une ct client et une ct serveur
Struts - M. Baron - Page 52

Struts : Validator : criture des contraintes dintgrit pisode 8 : gnration automatique de code JavaScript
... <html:form action="/main" onsubmit="return validateFormPersonne(this);" > <table> <tr><td>Nom</td><td><html:text property="nom" size="20" /></td></tr> <tr><td>Age</td><td><html:text property="age" size="3"/></td></tr> </table> <table> <tr>...</tr> </table> </html:form> <html:javascript formName="formPersonne" /> ...

Bote de dialogue gre par du JavaScript

Fichier JSP du formulaire Code source de la page HTML gnr par Tomcat
keulkeul.blogspot.com
... <!-- Begin function validateFormPersonne4(form) { if (bCancel) return true; else var formValidationResult; formValidationResult = validateRequired(form) && validateMask(form); return (formValidationResult == 1); } ...

Le code JavaScript a t gnr automatiquement par le framework Struts


Struts - M. Baron - Page 53

Struts : changement de Locale Struts gre en interne linternationalisation puisquil accde des fichiers properties pour les messages afficher Par dfaut la locale est configure suivant la localisation du client (un client dans une rgion franaise utilisera les properties fr) On peut cependant changer la locale dune partie partielle ou complte dune application Web Le changement de locale ne peut tre effectu que dans une classe Action du framework Struts La classe Action possde la mthode setLocale

keulkeul.blogspot.com

setLocale(HttpServletRequest,Locale)
HttpServletRequest : permet daccder la session de l utilisateur Locale : objet relatif la nouvelle locale
Struts - M. Baron - Page 54

Struts : changement de Locale Exemple : choisir la locale dune application Web


Le fichier JSP associ La page daccueil en Franais

<%@ taglib uri="htmlstruts" prefix="html" %> <%@ taglib uri="beanstruts" prefix="bean" %> <html> <head> <title><bean:message key="welcome.title"/></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <p><bean:message key="welcome.message"/></p>

Solution pour afficher une cl dune ressource

keulkeul.blogspot.com

<table width="200" border="0"> <tr> <th scope="col"><html:link page="/locale.do?locale=fr" ><html:img page="/vues/french.gif" width="23" height="20" /></html:link></th> <th scope="col"><html:link page="/locale.do?locale=en" ><html:img page="/vues/english.gif" width="23" height="20" /></html:link></th> <th scope="col"><html:link page="/locale.do?locale=sp" ><html:img page="/vues/spanish.gif" width="23" height="20" /></html:link></th> </tr> </table> </body> </html>

Les liens hypertextes font appel une action qui modifie la locale
Struts - M. Baron - Page 55

Struts : changement de Locale Exemple (suite) : choisir la locale dune application Web
... <action path="/localechoice" parameter="/vues/localechoice.jsp" type="org.apache.struts.actions.ForwardAction" /> <action path="/locale" type="monpackage.ChoiceLocale"> <forward name="success" path="/localechoice.do" /> </action> </action-mappings> </struts-config>

Laction associe la page JSP est deffectuer une simple redirection Quand lutilisateur clique sur le lien il appelle une action spcifique

keulkeul.blogspot.com

public class ChoiceLocale extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { String mon_objet = req.getParameter("locale"); Locale ma_locale; Modification de la if (mon_objet != null) { ma_locale = new Locale(mon_objet); locale laide du } else { paramtre de la requte ma_locale = new Locale("fr","FR"); } this.setLocale( req, ma_locale); return mapping.findForward("success"); La locale est modifie } au niveau session }

Struts - M. Baron - Page 56

Struts : changement de Locale Exemple (suite bis) : choisir la locale dune appli. Web
Fichier properties english
welcome.title=Flag Application welcome.message=Change language by clicking on the good flag

Fichier properties french


keulkeul.blogspot.com
welcome.title=Application Drapeau welcome.message=Changer le langage en cliquant sur le bon drapeau

Pas de fichier properties pour le langage spanish problme pour trouver la cl associe
Struts - M. Baron - Page 57

Struts : fichier struts-config.xml multiples Pour linstant nous nous sommes limits utiliser un seul fichier struts-config.xml pour dcrire lapplication Web La sparation en plusieurs fichiers permet
une meilleur visibilit des fichiers de configuration une dcomposition moins monolithique de lapplication Web globale

Dclarer dans web.xml tous les fichiers struts config.xml


...

Un fichier principal relatif lapplication Web globale


keulkeul.blogspot.com

supplmentaire ajouter une balise

struts-config.xml <init-param>

Pour chaque

<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>config/module1</param-name> <param-value>/WEB-INF/module1/struts-config.xml</param-value> </init-param> ... <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> ...

Struts - M. Baron - Page 58

Struts : fichier struts-config.xml multiples La dcomposition physique des fichiers de votre application Web peut suivre la logique suivante Pour accder un lment utilisation du nom du module associ dans lURL localhost:8080/appliweb/module1/toto.do
vues *.html, *.jsp, ...

Ce rpertoire contient toutes les pages JSP de lapplication Web Contient les descriptions globales de Struts et de lapplication

WEB-INF AppliWeb

web.xml, struts-config.xml

module1

struts-config.xml

keulkeul.blogspot.com

Chaque module est dcrit par un fichier


struts-config.xml

module 2

struts-config.xml

Le reste est identique (TLDS, lib, src, classes, )


...

Struts - M. Baron - Page 59

Struts : fichier struts-config.xml multiples Exemple : une petite appli. qui fait coucou plusieurs fois
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Application grant plusieurs fichiers struts-config</display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>config/module1</param-name> <param-value>/WEB-INF/module1/struts-config.xml</param-value> </init-param> <init-param> <param-name>config/module2</param-name> <param-value>/WEB-INF/module2/struts-config.xml</param-value> </init-param> <init-param> <param-name>config/module3</param-name> <param-value>/WEB-INF/module3/struts-config.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>

keulkeul.blogspot.com

Le fichier web.xml

Struts - M. Baron - Page 60

Struts : fichier struts-config.xml multiples Exemple (suite) : une petite appli. qui fait coucou
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <action-mappings> <action path="/welcome" parameter="/vues/welcome.jsp" type="org.apache.struts.actions.ForwardAction" /> </action-mappings> </struts-config>

Le fichier struts-config.xml
<%@ taglib uri="htmlstruts" prefix="html" %>

Permet didentifier le module vis

keulkeul.blogspot.com

<ul> <li><html:link module="/module1" action="/module1">Module 1</html:link></li> <li><html:link module="/module2" action="/module2">Module 2</html:link></li> <li><html:link module="/module3" action="/module3">Module 3</html:link></li> </ul>

welcome.jsp
Struts - M. Baron - Page 61

Le fichier

Struts : fichier struts-config.xml multiples Exemple (suite) : une petite appli. qui fait coucou
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <action-mappings> <action path="/module1" parameter="/vues/module1.jsp" type="org.apache.struts.actions.ForwardAction" /> </action-mappings> </struts-config>

Le fichier struts-config.xml du module 1


<%@ taglib uri="htmlstruts" prefix="html" %> Module 1 Pas de module <ul> <li><html:link module="" action="/welcome.do">Principale</html:link></li> <li><html:link module="/module2" action="/module2">Module 2</html:link></li> <li><html:link module="/module3" action="/module3">Module 3</html:link></li> </ul>

keulkeul.blogspot.com

Le fichier module1.jsp
Struts - M. Baron - Page 62

Struts et JSTL : coopration pour linternationalisation Nous avons tudi dans la partie des balises personnalises, la bibliothque JSTL et son module I18n La bibliothque JSTL est simple dutilisation et permet dajouter des fichiers properties sans dclaration dans Struts La coopration de JSTL et Struts pour laffichage dinformation dans les pages JSP ncessite la correspondance entre les variables Exemple pour linternationalisation et la variable locale
keulkeul.blogspot.com

Struts : org.apache.struts.action.LOCALE JSTL : javax.servlet.jsp.jstl.fmt.locale.session

Struts et JSTL ont la mme Locale fr, FR

session.setAttribute("org.apache.struts.action.LOCALE", new Locale("fr","FR")); session.setAttribute("javax.servlet.jsp.jstl.fmt.locale.session", new Locale("fr","FR"));

Solution : modifier dans une classe Action les deuxBaron - Page 63 variables Struts - M.

Struts et JSTL : coopration pour linternationalisation Exemple : cooprer JSTL et Struts


Remplace les balises Bean par celles de la JSTL
<%@ taglib uri="htmlstruts" prefix="html" %> <%@ taglib uri="fmtjstl" prefix="fmt" %> <html> <head> <fmt:setBundle basename="erreur" /> <title><fmt:message key="welcome.title" /></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>

La balise <body> <p><fmt:message key="welcome.message" /></p><br>dindiquer


keulkeul.blogspot.com

<table width="200" border="0"> <tr> <th scope="col"><html:link page="/locale.do?locale=fr" ><html:img page="/vues/french.gif" width="23" height="20" /></html:link></th> <th scope="col"><html:link page="/locale.do?locale=en" ><html:img page="/vues/english.gif" width="23" height="20" /></html:link></th> <th scope="col"><html:link page="/locale.do?locale=sp" ><html:img page="/vues/spanish.gif" width="23" height="20" /></html:link></th> </tr> </table> </body> </html>

la ressource properties

setBundle permet

Reprise de lexemple avec les drapeaux

Affichage des cls en utilisant la balise fmt

Struts - M. Baron - Page 64

Struts et JSTL : coopration pour linternationalisation Exemple (suite) : cooprer JSTL et Struts
Rsultat si on choisit la langue anglaise

Classe de type Action


public class ChoiceLocale extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { String mon_objet = req.getParameter("locale"); Locale ma_locale; if (mon_objet != null) { La classe Action est complte de ma_locale = new Locale(mon_objet); manire modifier la variable lie } else { ma_locale = new Locale("fr","FR"); linternationalisation de JSTL } this.setLocale( req, ma_locale); req.getSession().setAttribute("javax.servlet.jsp.jstl.fmt.locale.session", ma_locale); return mapping.findForward("success"); } }

keulkeul.blogspot.com

Struts - M. Baron - Page 65