Professional Documents
Culture Documents
Struts
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
h Pédagogie du cours
h Illustration avec de nombreux exemples
h Pré-requis
h Connaissance de Java
keulkeul.blogspot.com
Le client envoie
une requête au Le contrôleur Non étudié dans
contrôleur struts-config.xml traite la ce cours
struts-config.xml
requête du
Client WEB Configuration
2 client
EJB
EJB
1 ActionServlet
ActionServlet ActionForm
ActionForm Fichiers Java
Accès
AccèsDonnées
Le client reçoit La vue est Données
la présentation choisie et Action
Action Fichiers Java
issue de la vue 6 4 paramétrée
Contrôleur selon l’état du Fichiers Java
contrôleur 3 Modèle
informations des
page.jsp
page.jsp 5 page JSP en HTML
formulaires
Fichiers JSP SGBD (mySQL,
JSTL
JSTL properties.fr Oracle, …)
properties.fr
Struts
Struts properties.en
properties.en
Vue
Biblio. Perso. Ressources
Struts - M. Baron - Page 7
Struts : principe générique de la méthode : Contrôleur
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> Possibilité de définir
...
plusieurs ActionServlet
pour une même
Toute URL terminant par « .do » application Web
est traitée par le contrôleur
Struts - M. Baron - Page 9
Struts : le fichier configuration struts-config.xml
requête au contrôleur
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config> Quand le client transmet l’URL
<action-mappings>
<action « .../monnom.do » au contrôleur celui-ci
path="/monnom" redirige vers « /vues/mapage.jsp »
parameter="/vues/mapage.jsp"
type="org.apache.struts.actions.ForwardAction" />
</action-mappings>
</struts-config> Il s’agit d’une re-direction
Struts - M. Baron - Page 12
Struts : Action
scope="session"
validate="true"
« /vues/mapage.jsp » si aucun problème
input="/pageerreurs.do"
parameter="/vues/mapage.jsp"
type="org.apache.struts.actions.ForwardAction" />
</action-mappings>
</struts-config>
<action
path="/erreurs" sinon direction
parameter="/vues/erreurs.jsp" « /erreurs.do »
type="org.apache.struts.actions.ForwardAction" />
</action-mappings>
</struts-config>
client
h La classe ActionForm dispose également d’autres méthodes
h ActionServlet getServlet() : retourne la Servlet qui gère le contrôle
h reset(ActionMapping, HttpServletRequest) : initialise les propriétés
Struts - M. Baron - Page 19
Struts : ActionForm
}
Les modifieurs et
public String getAge() { accesseurs pour traiter
return age; et modifier les propriétés
}
...
}
}
} catch (Exception e) {
keulkeul.blogspot.com
erreurs.add("ageincorrect",
new ActionMessage("formulaire.age.incorrect",age));
}
}
return erreurs;
}
}
Depuis la nouvelle version 1.2, il faut utiliser
ActionMessage et non ActionError (désapprouvée)
Struts - M. Baron - Page 22
Struts : ActionForm et ActionErrors
<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
keulkeul.blogspot.com
</html:link>
</body>
</html>
Emplacement des
fichiers properties
req.setAttribute("nom", formulaire.getNom());
req.setAttribute("age", formulaire.getAge());
Grâce au paramètre
ActionForm on a
return mapping.findForward("response"); accès au contenu du
}
}
Bean
</html:link>
</body>
</html>
<struts-config>
keulkeul.blogspot.com
<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> Déclaration des
</form-beans> deux propriétés
<action-mappings>
...
Le fichier struts-config.xml
Struts - M. Baron - Page 32
Struts : DynaActionForm
req.setAttribute("nom", formulaire.get("nom"));
req.setAttribute("age", formulaire.get("age"));
Il faut modifier
return mapping.findForward("response"); en conséquence
} l’action associée
}
keulkeul.blogspot.com
h Constats
h La vérification côté client est longue, explicitement non performante
car longue à débuguer et nécessite l’apprentissage du langage
JavaScript
h Permet de valider les données côté client sans écrire la moindre ligne
de JavaScript Struts - M. Baron - Page 35
Struts : Validator : Déploiement
...
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
Description ...
d’une
<global> Valeur d’une
<constant-name>...</constant-name>
constante <constant-value>...</constant-value> constante
</global>
...
keulkeul.blogspot.com
h groupe de caractères : \d, \D, \w, \W, \s, \S, \b, \B et \nnn
h autres méta-caractères : {m,n}, |, […]
Les expressions régulières sont puissantes
et sont souvent utilisées dans les langages
de Scripts (Perl, shell bash, …)
Struts - M. Baron - Page 40
Struts : Validator : Expression Régulière :
Méta-caractères
h Le point « . » : représente n’importe quel caractère
h 123.5 => 123.5, 12345, 123t5, 123 5, ...
h Le point d’interrogation « ? » : le caractère précédent « ? »
est optionnel Le caractère « \ » est utilisé comme
échappement. Pour chercher « . »
h 12?45 => 145, 1245 on utilisera « \. », ...
h L’étoile « * » : le caractère précédent « * » peut être répété
0 ou plusieurs fois
h 12*45 => 145, 122245
h Le plus « + » : le caractère précédent « + » peut être répété
1 ou plusieurs fois
keulkeul.blogspot.com
h Alternative | : a | b => a or b
«-»
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 d’intégrité
...
<field property="prop1" depends="required, mask" >
...
</field>
...
...
<field property="prop1" depends="required, mask" >
keulkeul.blogspot.com
<var-name>mask</var-name>
<var-value>^\s*\d+\s*$</var-value>
</field>
...
</field>
...
keulkeul.blogspot.com
<var>
<var-name>mask</var-name> respecter l’expression
<var-value>${entierpositif}</var-value>
</var> régulière définie par
</field> entierpositif
</form>
</formset>
</form-validation>
...
<!-- Begin
function validateFormPersonne4(form) {
if (bCancel)
return true;
else Le code JavaScript a été
var formValidationResult;
formValidationResult = validateRequired(form) &&
généré automatiquement
validateMask(form);
return (formValidationResult == 1);
par le framework Struts
}
...
Struts - M. Baron - Page 53
Struts : changement de Locale
<html>
<head>
<title><bean:message key="welcome.title"/></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
Solution pour afficher
<body>
<p><bean:message key="welcome.message"/></p> une clé d’une ressource
<table width="200" border="0">
<tr>
<th scope="col"><html:link page="/locale.do?locale=fr" ><html:img
keulkeul.blogspot.com
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
relatif à l’application
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
Web globale <param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
keulkeul.blogspot.com
<init-param>
<param-name>config/module1</param-name>
<param-value>/WEB-INF/module1/struts-config.xml</param-value>
</init-param>
Pour chaque ...
<servlet-mapping>
struts-config.xml <servlet-name>action</servlet-name>
supplémentaire ajouter
<url-pattern>*.do</url-pattern>
</servlet-mapping>
une balise ...
<init-param>
Struts - M. Baron - Page 58
Struts : fichier struts-config.xml multiples
module1 struts-config.xml
Chaque module est décrit
keulkeul.blogspot.com
par un fichier
struts-config.xml
module 2 struts-config.xml
<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>
keulkeul.blogspot.com
<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>
Le fichier web.xml
Struts - M. Baron - Page 60
Struts : fichier struts-config.xml multiples
<struts-config>
<action-mappings>
<action path="/welcome" parameter="/vues/welcome.jsp"
type="org.apache.struts.actions.ForwardAction" />
</action-mappings>
</struts-config>
Permet d’identifier
Le fichier struts-config.xml
le module visé
<%@ taglib uri="htmlstruts" prefix="html" %>
<ul>
keulkeul.blogspot.com
Le fichier
welcome.jsp
<struts-config>
<action-mappings>
<action path="/module1" parameter="/vues/module1.jsp"
type="org.apache.struts.actions.ForwardAction" />
</action-mappings>
</struts-config>
Le fichier module1.jsp
<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">
Reprise de l’exemple
</head> avec les drapeaux
<body> La balise setBundle permet
<p><fmt:message key="welcome.message" /></p><br>d’indiquer la ressource
<table width="200" border="0"> properties
<tr>
<th scope="col"><html:link page="/locale.do?locale=fr" ><html:img
keulkeul.blogspot.com
Résultat si on choisit la
langue anglaise