Académique Documents
Professionnel Documents
Culture Documents
Struts
Struts
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
h Pr-requis
keulkeul.blogspot.com
h Connaissance de Java h Connaissance des fondements du WEB (HTML, HTTP) h Connaissance des technologies fondatrices de Java EE (Servlet, JSP, balises personnalises)
Struts - M. Baron - Page 3
Struts : quest-ce-que cest ... h La bibliothque Struts est un framework qui permet de construire des applications Web respectant le modle darchitecture MVC h Cest une bibliothque qui fournit le minimum de rgles pour construire une application Web professionnelle (sparation des mtiers et donc des comptences) h Struts est un projet soutenu par lApache Software Foundation. Site de rfrence struts.apache.org
keulkeul.blogspot.com
h Logique de fonctionnement
h la structure de lapplication Web est dcrite dans struts-config.xml h lutilisation de Servlets est transparente via des classes adaptes h 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 ? h Struts est un framework assez lourd pour une simple application (un formulaire et une rponse par exemple) h 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 h Sur le Web de nombreuses formations quant son utilisation,
keulkeul.blogspot.com
montrent son importance dans les projets industriels h 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
h Les nombreuses ressources prsentent principalement la version 1.1 de la bibliothque de Struts (incompatibilit avec la 1.2) h Tlchargement de Struts struts.apache.org/download.cgi
keulkeul.blogspot.com
struts-config.xml struts-config.xml
Configuration 2
EJB EJB
Fichiers Java
ActionServlet ActionServlet
Fichiers Java
4 Contrleur
keulkeul.blogspot.com
Vue
Struts : principe gnrique de la mthode : Contrleur h Le contrleur est le cur de lapplication Web. Toutes les demandes du client transitent par lui h Il est dfini par une Servlet gnrique de type ActionServlet fournie par lAPI de Struts h Le contrleur prend les informations dont il a besoin dans le fichier struts-config.xml h Si la requte du client contient des paramtres, ceux-ci sont
keulkeul.blogspot.com
transmis dans un objet de type ActionForm h Selon ltat retourn par lActionForm prcdent, le contrleur traite une action spcifique par un objet de type
Action
Struts : intgration dans lapplication web h De manire intgrer le framework Struts dans une application Web, il est ncessaire denrichir le fichier web.xml h 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 ...
keulkeul.blogspot.com
Struts : le fichier configuration struts-config.xml h Le fichier grant la logique de lapplication Web sappelle par dfaut struts-config.xml h Il est plac dans le rpertoire WEB-INF au mme niveau que
web.xml
keulkeul.blogspot.com
h 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>
Struts : Action h Une action est un traitement obtenu suite au passage de la requte au contrleur h Nous distinguons deux sortes de requte client
h requte sans paramtre issue par exemple dune re-direction h requte avec paramtres issue par exemple dun formulaire
au moyen de la balise <action> h Selon le type de requte (avec ou sans paramtre) diffrents attributs de la balise <action> sont renseigner
Struts - M. Baron - Page 11
Struts : Action h Dans le cas dune requte sans paramtre le rle du contrleur est de relayer la demande du client une URL h La balise <action> dispose alors des attributs suivants
h String path : dfinit le nom de lURL (suffixe .do implicite) h 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 h 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 : Action h Dans le cas dune requte avec paramtres le rle du contrleur est double
h transmettre les informations dans un objet Bean de type ActionForm h raliser une action spcifique (autre quune simple redirection)
h La balise <action> dispose, en plus des attributs dj tudis, des attributs suivants
h String scope : les valeurs du formulaire sont stockes en session
keulkeul.blogspot.com
h String name : rfrence le nom dune section <form-bean> (voir ci-aprs) h String validate : indique si la mthode validate de lobjet ActionForm doit tre appele ou non (voir ci-aprs) h String input : indique la vue qui sera appele sil y a erreur dans lobjet
ActionForm
Struts : Action h Les formulaires sont dclars dans la balise <form-beans> au moyen de la balise <form-bean> h La balise <form-bean> possde les attributs suivants
h String name : nom du formulaire de la page JSP h 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
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>
keulkeul.blogspot.com
Struts : ActionForm h Lobjectif dun objet de type ActionForm est de stocker les informations issues dun formulaire h Les objets de type ActionForm sont construits comme un objet Bean : utilisation du principe de la rflexivit h La classe Bean devra donc hriter de la classe ActionForm du package org.apache.struts.action h Cest le contrleur via la Servlet qui se charge de crer les instances des objets de type ActionForm
keulkeul.blogspot.com
Struts : ActionForm h Hormis le but de stocker les proprits des formulaires, les objets de type ActionForm soccupent aussi de laspect smantique des donnes h La mthode validate soccupe de vrifier la validit des attributs de lobjet Bean h ActionErrors validate(ActionMapping, HttpServletRequest)
h le paramtre ActionMapping est un objet image de la configuration de laction en cours stocke dans struts-config.xml h le paramtre HttpServletRequest est la requte du client transmise par la Servlet de contrle
keulkeul.blogspot.com
Struts : ActionForm h Un objet de type ActionMapping permet dextraire les informations contenu dans le fichier struts-config.xml h 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 " /> ...
h String getType() : pour accder au contenu de lattribut type h String getInput() : pour accder au contenu de lattribut input
keulkeul.blogspot.com
h Un objet ActionErrors permet dajouter des erreurs et lajout se fait par la mthode
h add(String, ActionMessage) : o le premier paramtre correspond la cl et le second au message derreur
Struts - M. Baron - Page 20
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
keulkeul.blogspot.com
Depuis la nouvelle version 1.2, il faut utiliser ActionMessage et non ActionError (dsapprouve)
Struts : ActionForm et ActionErrors h Les messages derreurs stocks dans un objet ActionErrors et retourns par la mthode validate sont transmis au contrleur h 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 " /> ...
h 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/>
h La balise <errors> naffiche pas les messages mais des identifiants prsents dans un fichier ressource qui doit tre rfrenc dans struts-config.xml
Struts : ActionForm et ActionErrors h Pour dclarer un fichier ressource dans le fichier configuration struts-config.xml utiliser la balise <message-resources>
h String parameter : nom du fichier ressource h boolean null : true affiche null, false affiche ???key??? struts-config.xml h String key : utiliser quand il y a plusieurs fichiers ressources
De prfrence la fin du fichier
keulkeul.blogspot.com
h Le fichier ressource doit tre placer obligatoirement dans un sous-rpertoire de /WEB-INF/classes. Exemples :
h /WEB-INF/classes/toto.properties h /WEB-INF/classes/
Les fichiers ressources sont obligatoires quand vous utilisez la balise <errors> dans une page JSP
h Pour choisir le fichier ressource, utilisez lattribut bundle dans la balise <errors> en indiquant le nom de la cl
Struts - M. Baron - Page 24
keulkeul.blogspot.com
h De manire pouvoir raliser des actions plus complexes (modification du modle, cration de nouveaux Bean, )
keulkeul.blogspot.com
nous drivons explicitement la classe Action h Cette classe possde la mthode execute appele par le constructeur de lapplication Web si aucune erreur ne sest produite
Struts - M. Baron - Page 26
HttpServletRequest, HttpServletResponse)
h le paramtre ActionMapping est un objet image de la configuration de laction en cours stocke dans struts-config.xml h le paramtre ActionForm correspond au Bean qui stocke linformation du formulaire h le paramtre HttpServletRequest est la rfrence de la requte h le paramtre HttpServletResponse est la rfrence de la rponse h le retour ActionForward est un objet pour identifier la destination prochaine que le contrleur choisira
keulkeul.blogspot.com
h Il faut modifier galement struts-config.xml en ajoutant au corps de la balise <action> la balise <forward>
h String name : tiquette pour la re-direction h String path : chemin de re-direction
Struts - M. Baron - Page 27
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> ...
Utilisation des EL dans la page JSP puisque deux attributs ont t dfinis dans la classe FormulaireAction (scope = request)
keulkeul.blogspot.com
Struts : DynaActionForm h Les objets ActionForm sont des Beans qui permettent de stocker des proprits statiques et de les valider h Un constat
h les valeurs dun formulaire sont des chanes de caractres : String pour les valeurs uniques et String[] pour les valeurs champs multiples h il faut redfinir chaque fois des get et des set pour les proprits
h dont la structure est dclare dans le fichier struts-config.xml h qui sont crs dynamiquement par lenvironnement Struts
h Ralisation
h utilisation de la classe DynaActionForm h modification de la balise <form-bean>
Struts - M. Baron - Page 30
Struts : DynaActionForm h La classe DynaActionForm possde la mme mthode validate que ActionForm cependant laccs aux attributs se fait par un objet Map h Utiliser les mthodes suivantes
h Object get(String) : retourne la valeur de la proprit donne en paramtre
String ma_propriete = (String)this.get("nom");
h 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
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
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> ...
Le fichier struts-config.xml
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
Cette solution offre lavantage de dcrire la structure du Bean par une description XML
Struts - M. Baron - Page 33
Struts : Validator : des constats ... h En utilisant la solution DynaActionForm nous sommes encore obligs dcrire le code Java correspondant aux contraintes dintgrit h La validation des donnes se fait uniquement ct serveur h Deux types de validation
h validation de contrle de surface (prsence ou pas de donnes, donnes numriques contenant ou pas de lettres ?)
keulkeul.blogspot.com
h Permet de dcrire des contraintes dintgrit directement dans un fichier XML h Permet de valider les donnes ct client sans crire la moindre ligne de JavaScript
Struts - M. Baron - Page 35
Struts : Validator : Dploiement h Le plug-in Validator doit tre ajout dans lapplication Web
h Ajouter au rpertoire bibliothque de votre application commons-validator.jar et jakarta-oro.jar h Ajouter le fichier validator-rules.xml dfinissant les contraintes dintgrit standard dans le rpertoire /WEB-INF
h Ajouter la balise <plug-in> dans le fichier struts-config.xml qui sert charger la classe externe Validator Struts
h String classname : indique le nom de la classe instancier h La balise <set-property> est utiliser pour initialiser la classe h String property : le nom de la proprit initialiser
keulkeul.blogspot.com
Struts : Validator : Dploiement h Prciser dans la balise <form-bean> que lActionForm est dfinie par org.apache.struts.validator.DynaValidatorForm h Prciser galement les paramtres prsents dans le formulaire comme pour DynaActionForm dans la balise <form-property>
h String name : le nom du champ h 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 : Validator : criture des contraintes dintgrit h Les contraintes dintgrit sont dfinies explicitement dans un fichier xml (ici validation.xml) h Le fichier dcrit en deux parties des rgles dintgrit qui se trouvent dans la balise <form-validation>
h <global> : informations porte globale, valable dans tous les formulaires h <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
Struts : Validator : criture des contraintes dintgrit h Dans la balise <global> on peut dfinir des constantes utilises dans les autres descriptions des formulaires
h <constant-name> : nom de la constante h <constant-value> : contient la valeur de la constante
Description dune constante
keulkeul.blogspot.com
... <global> <constant-name>...</constant-name> <constant-value>...</constant-value> </global> ...
h 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 h Rappel : une expression rgulire permet de trouver plusieurs mots ou phrases qui sont proches (hydro => hydrocarbure, hydrofuge, ) h On ne vrifie ici pas le contenu des paramtres (effectu dans la classe Action) mais la forme (chiffre avec des lettres,
caractres interdits, ...)
h Elles sont bases sur des caractres spcifiques ayant chacun une importance h Nous trouvons trois types de caractres
keulkeul.blogspot.com
h mta-caractres : ^, ., ?, *, + et le $ h groupe de caractres : \d, \D, \w, \W, \s, \S, \b, \B et \nnn h autres mta-caractres : {m,n}, |, []
Les expressions rgulires sont puissantes et sont souvent utilises dans les langages de Scripts (Perl, shell bash, )
Struts : Validator : Expression Rgulire : Mta-caractres h Le point . : reprsente nimporte quel caractre
h 123.5 => 123.5, 12345, 123t5, 123 5, ...
h Le point dinterrogation ? : le caractre prcdent ? Le caractre \ est utilis comme est optionnel
h 12?45 => 145, 1245
chappement. Pour chercher . on utilisera \. , ...
keulkeul.blogspot.com
Struts : Validator : Expression Rgulire : Groupe de caractres h \d : tout caractre numrique : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 h \D : tout caractre sauf numrique h \w : une lettre, une lettre accentue, un chiffre ou _ h \W : tout caractre sauf une lettre, accentue, un chiffre ou _ h \s : espace, tabulation, saut de ligne, ou tout autre caractre non imprimable
keulkeul.blogspot.com
h \S : tout caractre sauf ceux dfinis par \s h \b : espace, ponctuation, le dbut du texte du texte, fin du texte h \B : le contraire de \b
Struts - M. Baron - Page 42
Struts : Validator : Expression Rgulire : autre mta-caractres h Accolades {n,m} : les accolades agissent comme ltoile, litration est comprise entre n et m h Alternative | : a | b => a or b h Occurrence [abc] : 1 lettre au choix parmi trois h Occurrence [a-z], [g-j], [a-zA-Z] : lettre comprise entre ... h Occurrence [0-9], [6-9] : chiffre compris entre
keulkeul.blogspot.com
h Occurrence [abc-], [a-z-] : toute lettre comprise entre et - h 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 h a\.*z => az, a.z, a..z, a..z, ... h a\+\+z => a+z, a+++++z, a+++++++++++z, ... h a\.?e => ae, a.e et rien dautre h a\Dz => aaZ, a%z, abz mais ne trouvera pas a2z, a5z h l\.\d\d\d4 => 1.4544, 1.8884, 1.3254, h \D+ : toute chane de caractre non nulle sans caractres h a{1,3} => a, aa, aaa et rien d autre h a.{2,2}z => abrz, avbz, a23z
keulkeul.blogspot.com
h a|b => a, b h (a|b)+ => a, b, ab, ba, abab h [\[\\\]]abc => [abc, \abc, ]abc h java[4-8] => java4, java5, , java8
Struts - M. Baron - Page 44
Struts : Validator : criture des contraintes dintgrit h Pour chaque formulaire dcrit dans la balise <form> il faut prciser les contraintes dintgrit des paramtres h Le nom du formulaire est indiqu dans lattribut name de
<form>
h Une balise <form> contient autant de balises <field> que de paramtres du formulaire
h String property : nom du champ du formulaire pour lequel des contraintes dintgrit sont dfinies h String depends : liste des contraintes dintgrit vrifier
... <form name="..." > <field property="..." depends="..." > ... </field> ... </form> <form name="..." > ... </form> ...
keulkeul.blogspot.com
Struts : Validator : criture des contraintes dintgrit h Lattribut depends peut prendre les valeurs suivantes
h required : champ ne doit pas tre vide h mask : le champ doit correspondre une ExpReg dfinie par mask h integer : champ doit tre un entier h byte, long, float, double, email, date, range, ...
h Possibilit de mettre plusieurs valeurs dans lattribut depends h 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> ...
Struts : Validator : criture des contraintes dintgrit h Lexpression rgulire associe la variable mask est renseigne par la sous balise <var> de la balise <field> h La balise <var> possde les sous balises suivantes
h <var-name> : nom de la variable modifier h <var-value> : valeur de la variable
Modification de la variable mask
...
keulkeul.blogspot.com
Utilisation dune expression rgulire qui exprime que seuls des chiffres prcds et suivis despace sont autoriss
Struts : Validator : criture des contraintes dintgrit h Chaque contrainte est lie un message derreur dfini par une cl et dont le contenu est initialis dans les fichiers properties
h errors.required : message li la contrainte required h errors.invalid : message li la contrainte mask h errors.email : message lie la contrainte email
h 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
Struts : Validator : criture des contraintes dintgrit h 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>
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> ...
Struts : Validator : criture des contraintes dintgrit h 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 : Validator : criture des contraintes dintgrit h 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
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 h Nous avons vu pour linstant que la vrification des donnes se faisait essentiellement ct serveur h Struts et le plug-in Validator offre la possibilit de renforcer la vrification en amont ct client en gnrant automatiquement le JavaScript h Le JavaScript gnr correspond la description donne dans le fichier de contraintes dintgrit h Deux choses doivent tre renseignes dans la JSP du formulaire
keulkeul.blogspot.com
h Dans la balise <form> il faut initialiser lattribut onsubmit = "return validateFormPersonne(this)" si le nom du form. est FormPersonne h 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 h 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" /> ...
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); } ...
Struts : changement de Locale h Struts gre en interne linternationalisation puisquil accde des fichiers properties pour les messages afficher h Par dfaut la locale est configure suivant la localisation du client (un client dans une rgion franaise utilisera les properties fr) h On peut cependant changer la locale dune partie partielle ou complte dune application Web h Le changement de locale ne peut tre effectu que dans une classe Action du framework Struts h La classe Action possde la mthode setLocale h setLocale(HttpServletRequest,Locale)
h HttpServletRequest : permet daccder la session de l utilisateur h Locale : objet relatif la nouvelle locale
Struts - M. Baron - Page 54
keulkeul.blogspot.com
<%@ 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>
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 h 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 : changement de Locale h 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
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 h Pour linstant nous nous sommes limits utiliser un seul fichier struts-config.xml pour dcrire lapplication Web h La sparation en plusieurs fichiers permet
h une meilleur visibilit des fichiers de configuration h une dcomposition moins monolithique de lapplication Web globale
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 : fichier struts-config.xml multiples h La dcomposition physique des fichiers de votre application Web peut suivre la logique suivante h 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
module 2
struts-config.xml
Struts : fichier struts-config.xml multiples h 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 : fichier struts-config.xml multiples h 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" %>
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 h 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>
keulkeul.blogspot.com
Le fichier module1.jsp
Struts - M. Baron - Page 62
Struts et JSTL : coopration pour linternationalisation h Nous avons tudi dans la partie des balises personnalises, la bibliothque JSTL et son module I18n h La bibliothque JSTL est simple dutilisation et permet dajouter des fichiers properties sans dclaration dans Struts h La coopration de JSTL et Struts pour laffichage dinformation dans les pages JSP ncessite la correspondance entre les variables h Exemple pour linternationalisation et la variable locale
keulkeul.blogspot.com
h Solution : modifier dans une classe Action les deux variables Struts - M. Baron - Page 63
<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
Struts et JSTL : coopration pour linternationalisation h Exemple (suite) : cooprer JSTL et Struts
Rsultat si on choisit la langue anglaise
keulkeul.blogspot.com