Beruflich Dokumente
Kultur Dokumente
Struts
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
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
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
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 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 : 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 ...
keulkeul.blogspot.com
Struts : le fichier configuration struts-config.xml Le fichier grant la logique de lapplication Web sappelle par dfaut struts-config.xml Il est plac dans le rpertoire WEB-INF au mme niveau que
web.xml
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>
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
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
keulkeul.blogspot.com
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 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
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 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
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
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
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 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 : 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???
De prfrence la fin du fichier
struts-config.xml
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
keulkeul.blogspot.com
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
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
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 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
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");
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 ... 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
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
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 : 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
keulkeul.blogspot.com
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> ...
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,
caractres interdits, ...)
Elles sont bases sur des caractres spcifiques ayant chacun une importance Nous trouvons trois types de caractres
keulkeul.blogspot.com
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 : 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 \. , ...
keulkeul.blogspot.com
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 Le nom du formulaire est indiqu dans lattribut name de
<form>
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
keulkeul.blogspot.com
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> ...
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
Utilisation dune expression rgulire qui exprime que seuls des chiffres prcds et suivis despace sont autoriss
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
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 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 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 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.
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 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 : 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" /> ...
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 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
<%@ 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 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 Exemple (suite bis) : choisir la locale dune appli. Web
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
Pour chaque
struts-config.xml
supplmentaire ajouter une balise
...
<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>
<init-param>
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
struts-config.xml
Le reste est identique (TLDS, lib, src, classes, )
...
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 : 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" %>
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>
Le fichier
welcome.jsp
Struts - M. Baron - Page 61
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>
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
Solution : modifier dans une classe Action les deuxBaron - Page 63 variables Struts - M.
setBundle permet
<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
Struts et JSTL : coopration pour linternationalisation Exemple (suite) : cooprer JSTL et Struts
Rsultat si on choisit la langue anglaise
keulkeul.blogspot.com