Académique Documents
Professionnel Documents
Culture Documents
Cette faq a t ralise partir des questions frquemment poses sur les forums de www.developpez.com et de l'exprience personnelle des auteurs. Nous tenons souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette faq ne prtend pas non plus tre complte. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rdacteur, lisez ceci. Sur ce, nous vous souhaitons une bonne lecture. L'quipe Java
OButterlin - dje_dje - mattheox - mezoo - blbird L'quipe Java - c_nvy - Alwin - Sniper37 - hipchic - jak0 - Jaxofun - SEMPERE Benjamin - Lunatix - Ricky81 - Lionel Roux (aka RanDomX)
La FAQ Struts
1. 2. 3. 4. 5.
Informations (5) ...................................................................................................................................................... 4 Gnralits (4) ........................................................................................................................................................6 Configuration de l'application web (6) ....................................................................................................................7 Bibliothques de tags (2) ..................................................................................................................................... 11 Configuration de l'application Struts (14) ............................................................................................................. 12 5.1. Les ActionForms (2) .................................................................................................................................... 15 5.2. Les Exceptions (3) ....................................................................................................................................... 17 5.3. Les Datasources (3) .................................................................................................................................... 19 5.4. Divers (3) ..................................................................................................................................................... 21 6. I18N (5) ................................................................................................................................................................ 23 7. Formulaires (18) ................................................................................................................................................... 30 7.1. Validation (6) ................................................................................................................................................ 33 7.2. Checkbox et Radiobutton (2) .......................................................................................................................37 7.3. Listes (3) ...................................................................................................................................................... 39 7.4. Fichiers (3) ................................................................................................................................................... 42 8. Liens (5) ............................................................................................................................................................... 45 9. Erreurs (5) ............................................................................................................................................................ 47 10. Messages (1) ......................................................................................................................................................52 11. DataSource (2) ................................................................................................................................................... 53 12. Scurit (2) .........................................................................................................................................................54 13. Plug-ins (3) ......................................................................................................................................................... 55 14. Trucs et Astuces (5) ...........................................................................................................................................56
-3Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrets. Cette page est dpose la SACD. lien : lien : lien : Licence en anglais Licence "non-officielle" en franais Comment participer cette FAQ ?
Remerciements
Auteur : L'quipe Java Un grand merci tous ceux qui ont pris de leur temps pour la ralisation de cette FAQ. Aux rdacteurs : Remerciements tout d'abord tous ceux qui ont rdig les questions et les rponses. Aux correcteurs : Remerciements galement aux personnes qui ont relu les textes pour supprimer un maximum de fautes de franais. A l'quipe Java : Remerciements tous particuliers aux membres de la rubrique Java pour leurs conseils, corrections, relectures, ides, etc. Bref, merci pour leur travail d'quipe qui a permis de faire aboutir ce projet. Aux visiteurs et membres de DVP : Remerciements enfin tous ceux qui ont consult cette FAQ, et qui, par leurs remarques, nous ont aid la perfectionner. Remerciements particuliers Cyberzoide, Braim, babylone07 et Clment Cunin
-5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
-6Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Configuration de l'application web Comment configurer la servlet ActionServlet dans le fichier web.xml?
Auteurs : Alwin - Lionel Roux (aka RanDomX) Le framework Struts consiste en une application web classique, dont le point d'entre unique (MVC model 2 oblige) est une servlet appele ActionServlet. Pour configurer l'ActionServlet, vous devez dans un premier temps dclarer la servlet et lui attribuer un alias:
<web-app> <servlet> <servlet-name>action<servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> ... </web-app>
<servlet-name> dfinit l'alias dont vous devez vous servir dans le reste du descripteur de dploiement web.xml. <servlet-class> dfinit le nom entirement qualifi de la servlet ActionServlet. <load-on-startup> (entier positif) sert attribuer une priorit de chargement de la servlet par le conteneur, 1 tant la priorit la plus leve. Pour dfinir quelles sont les requtes que la servlet ActionServletdoit intercepter, il faut configurer le mapping de celle-ci:
<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
Dans cet exemple, toutes les requtes qui finissent par *.do sont intercepts et traits par la servlet ActionServlet. Il est d'usage d'utiliser *.do ou /do/* comme expression rgulire pour dfinir le mapping.
-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Vous pouvez changer cette valeur pour faire pointer le paramtre vers le fichier de votre choix. Vous pouvez dclarer plusieurs fichiers de configuration en les sparant par des virgules.
Vous pouvez changer cette valeur pour faire pointer le paramtre vers le fichier de votre choix. Vous pouvez dclarer plusieurs fichiers de configuration en les sparant par des virgules. Vous pouvez rpter le paramtre pour chaque module de votre application. lien : Comment changer le nom ou l'emplacement du fichier struts-config.xml ?
Ceci peut s'avrer trs intressant lorsque les fichiers de configurations prennent de l'importance. Cela peut permetre de sparer les diffrentes parties de ces fichiers.
-8Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Attention cependant par la suite aux collisions de noms de formBean et d'actions plus difficiles viter lorsqu'on utilise plusieurs fichiers. lien : Comment dclarer le fichier de configuration d'un module Struts ?
Vous pouvez spcifier plusieurs lments <welcome-file> lien : Comment dfinir une Action comme une page d'accueil d'une application ?
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
On notera qu'il est d'usage de dclarer le chemin relatif comme alias. Attention, les exigences de la dclaration varient en fonction de l'implmentation de J2EE/Java EE. A partir de J2EE 1.4 il n'est plus ncessaire de dclarer les taglibs dans le web.xml. lien : lien : Pour plus de dtails, consultez la FAQ Java EE. Qu'apportent les bibliothques de tags de Struts par rapport la JSTL ?
- 10 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Bibliothques de tags Qu'apportent les bibliothques de tags de Struts par rapport la JSTL ?
Auteurs : Alwin - Ricky81 Les bibliothques bean et logic proposent peu de choses prs des fonctionnalits identiques la JSTL. On entend parfois dire qu'elle sont plus intuitives et plus faciles comprendre par des designers n'ayant cure de Java. Cependant, la tendance (et c'est ce qui est prconis par l'auteur de Struts) est l'utilisation massive de la JSTL (si possible combine EL) en remplaement des balises Struts (hors bibliothque html et ses extensions dans la bibliothque nested). Un exemple :
<html:select property="position"> <c:forEach begin="1" end="20" var="i"> <html:option value="${i}">${i}</html:option> </c:forEach> </html:select>
Cette directive n'est pas pas toujours applique dans cette FAQ pour des raisons historiques et de comprhension. lien : lien : Que sont les JSP Taglibs ? Quels sont les objectifs de la JSTL ?
- 11 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Configuration de l'application Struts Comment excuter un traitement avant le contrleur Struts ?
Auteur : Lionel Roux (aka RanDomX) Struts ne fournit pas de mcanisme pour raliser cela. Cependant ceci peut fait simplement en suivant l'une des techniques suivantes: Avec un conteneur compatible avec les spcification Servlet 2.3, vous pouvez implmenter un filtre de prtraitement. Avec une application compatible Struts 1.1 et plus, vous pouvez redfinir le RequestProcessor et y intgrer les prtraitements . Avec une application compatible Struts 1.0, vous pouvez redfinir l'ActionServlet et y intgrer les prtraitements Comment vrifier si l'utilisateur est identifi et si sa session n'a pas expir?
lien :
// On vrifie si la session a expire : la session expire si l'id de la session n'est pas valide protected boolean isSessionValid(HttpServletRequest request) throws ServletException { if (request != null) { return request.isRequestedSessionIdValid(); } } return false;
- 12 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
protected boolean processRoles(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws java.io.IOException, javax.servlet.ServletException { ActionMessages messages = new ActionMessages(); if (isSessionValid(request)) { if (isUserConnected(request)) { return true; } else { messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("erreurs.connection.required")); } } else { messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("erreurs.session.expired")); } // rediriger vers une page d'erreur request.getRequestDispatcher ("/error.jsp").forward(request,response); } return false;
Ensuite, dans votre fichier struts-config.xml, dans une action quelconque, par exemple ici TitreSecondaireInit, vous la dclarez en rajoutant le paramtre className :
<action path="/titresecondaireinit" name="titreSecondaireBean" scope="session" type="fr.appli.actions.TitreSecondaireInit" className="fr.appli.struts.MonActionMapping"> <set-property property="level" value="160" /> <forward name="ok" path="/vues/titresecondaire.jsp"/> </action>
Ensuite, dans l'implmentation de l'action, ici fr.appli.actions.TitreSecondaireInit, il ne vous reste plus qu' rcuprer le paramtre level comme ceci :
package fr.appli.actions;
- 13 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
// Imports faire public class TitreSecondaireInit extends Action { public TitreSecondaireInit() { super(); } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { TitreSecondaireBean titre = (TitreSecondaireBean) form; MonActionMapping am = (MonActionMapping) mapping; String level = am.getLevel(); // ...
- 14 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Configuration de l'application Struts > Les ActionForms Comment configurer un ActionForm ?
Auteur : Lionel Roux (aka RanDomX) Pour dclarer un ActionForm dans le fichier de configuration struts-config.xml, il suffit d'ajouter un noeud de type <form-bean> ce dernier.
<form-beans> <form-bean name="monBean" type="com.developpez.form.MonActionForm" /> ... </form-beans>
L'attribut name dsigne l'alias que vous utiliserez dans vos formulaires JSP et/ou HTML. L'attribut type dsigne le nom qualifi de la classe d'implmentation de votre ActionForm.
L'attribut name dsigne l'alias que vous utiliserez dans vos formulaires JSP et/ou HTML. L'attribut type dsigne le nom compltement qualifi de la classe d'implmentation de votre DynaActionForm. De plus, il faut spcifier un certain nombre de proprits qui seront les attributs de votre DynaActionForm grce aux lments de types <form-property> Chaque lment <form-property> possde un certain nombre d'attributs parmi lesquels: initial qui reprsente la valeur par dfaut de la proprit selon son type. name qui reprsente le nom de la proprit du dynabean. size qui reprsente le nombre d'lment si la proprit est un tableau. type qui reprsente le nom entirement qualifi du type de la proprit, suivi de [] si c'est un tableau.
<form-beans> <form-bean name="personDynaBean" type=" org.apache.struts.action.DynaActionForm"> <form-property name="name" type="java.lang.String" /> <form-property name="firstname" type="java.lang.String" /> <form-property name="birthDate" type="java.util.Date" /> </form-bean> ...
- 15 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
</form-beans>
- 16 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Configuration de l'application Struts > Les Exceptions Comment configurer la gestion des exceptions dans Struts ?
Auteurs : Lionel Roux (aka RanDomX) - Ricky81 Struts permet de grer les exceptions de manire dclarative. Dans vos classes Action, si une exception est leve, elle sera propage jusqu' la super classe Action, qui ira chercher si une exception est dclare pour le mapping de ladite Action. Si ce n'est pas le cas, elle ira ensuite chercher si une exception est dclare en tant qu'exception globale dans le fichier struts-config.xml. La gestion dclarative des exceptions cre aussi un message de type ActionMessage (ActionError pour les premires versions de Struts) partir de la cl de ResourceBundle indique. Ce message est alors utilis par la page jsp spcifie pour l'affichage d'un message d'erreur. Le plus grand avantage de ce type de dclaration, outre le fait de centraliser les exceptions, est sans doute de permettre de ne pas polluer le code source des classes Actions avec des blocs try/catch redondants dans plusieurs classes. Pour dclarer une exception , il suffit de crer un noeud de type <exception> au fichier struts-config.xml :
<exception key="error.message.key" path="/page.jsp" scope="request" type="java.handled.exception.type" />
Si une exception de type DatabaseException est leve, le framework Struts redirigera la requte vers la page dbfailure.jsp et affichera dans celle-ci le message dont la cl est error.database.failure. lien : Comment configurer la gestion des exceptions dans Struts ?
- 17 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Si une exception de type DatabaseException est leve, le framework Struts redirigera la requte vers la page myactionerror.jsp et affichera dans celle-ci le message dont la cl est error.database.failure. lien : Comment configurer la gestion des exceptions dans Struts ?
- 18 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Configuration de l'application Struts > Les Datasources Comment configurer un datasource utilisable directement par Struts ?
Auteur : Lionel Roux (aka RanDomX) Bien qu'il ne soit pas recommand de grer la persistence des donnes dans la couche de prsentation, il peut tre utile d'accder aux datasources directement. Le DataSource manager de Struts est le composant en charge de la gestion des DataSources; il est configur directement dans le fichier de configuration struts-config.xml. Il peut tre utilis pour dployer n'importe quel pool de connections qui implmente l'interface javax.sql.DataSource. Si aucun composant natif n'est livr, vous pouvez aussi utiliser le Jakarta Commons dbcp's BasicDataSource [org.apache.commons.dbcp.BasicDataSource] disponible dans le projet Commons chez Jakarta. Vous devez configurer votre source de donnes (exemple pour PostgreSQL) dans struts-config.xml :
<data-sources> <!-- configuration for commons BasicDataSource --> <data-source type="org.apache.commons.dbcp.BasicDataSource"> <set-property property="driverClassName" value="org.postgresql.Driver" /> <set-property property="url" value="jdbc:postgresql://localhost/mydatabase" /> <set-property property="username" value="me" /> <set-property property="password" value="test" /> <set-property property="maxActive" value="10" /> <set-property property="maxWait" value="5000" /> <set-property property="defaultAutoCommit" value="false" /> <set-property property="defaultReadOnly" value="false" /> <set-property property="validationQuery" value="SELECT COUNT(*) FROM users" /> </data-source> </data-sources>
Note: la requte de la proprit validationQuery doit retourner au moins une ligne. Vous pouvez ensuite utiliser directement cette connexion dans vos Actions. lien : Comment utiliser un DataSource directement avec Struts ?
- 19 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
</data-sources>
lien :
- 20 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Configuration de l'application Struts > Divers Comment utiliser plusieurs ResourceBundle avec Struts ?
Auteur : Lionel Roux (aka RanDomX) Struts 1.1 (et plus) supporte cette fonctionalit. Il permet de dfinir un ResourceBundle par dfaut et des ResourceBundles personnaliss. Chaque ResourceBundle personalis doit tre identifi par une cl dans le fichier struts-config.xml :
<message-resources parameter="application.resources"/> <message-resources parameter="foo.bar.custom.myCustomResource" key="Custom"/>
Pour faire rfrence ce dernier, vous devez spcifier une valeur pour l'attribut bundle :
<bean:write bundle="Custom" ...>
lien : Comment charger plusieurs fichiers de ressources (bundles) sans avoir utiliser les cls des bundles ? lien : Comment dfinir les fichiers de localisation en dehors du classpath ?
/** * Get the localized message */ public static String getLocalizedMessage(HttpServletRequest request, String messageKey) { MessageResources messageResources = getMessageResources(request); String localizedMessage = null; if(messageResources != null) { } localizedMessage = messageResources.getMessage(request.getLocale(), messageKey);
- 21 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
I18NHelper
} return localizedMessage;
Ainsi, imaginons que dans notre fichier de localisation, nous avons un message de ce style :
prompt.hello=Bonjour
Alors dans l'action struts, pour recuprer le message dans la bonne locale, il faut faire:
String msg = I18NHelper.getLocalizedMessage(request, "prompt.hello");
lien :
Comment dfinir une action qui n'a pas besoin de traitements particuliers; seulement une page JSP afficher ?
Auteurs : c_nvy - Sniper37 C'est un cas rarement utile, mais qui mrite d'tre signal. Il peut tre utilis dans les cas suivants : Nous avons notre propre ActionMapping, et que nous voulons faire un forward en passant par une action et sans traitement particulier ou sans rptition de traitement. Nous avons un autre moyen pour faire le traitement mtier.
<action path="/BasicAction" type="org.apache.struts.actions.ForwardAction" parameter="/WEB-INF/jsp/resultats.jsp" />
- 22 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > I18N Comment grer l'internationalisation (I18N) et/ ou la localisation avec Struts ? : Le ResourceBundle
Auteur : Lionel Roux (aka RanDomX) Struts supporte nativement le mcanisme d'internationalisation et de localisation offert par la plateforme Java : Le ResourceBundle et la Locale. Pour obtenir un ResourceBundle foo.bar.MyResourceBundle, il suffit de crer un ou plusieurs fichiers dans le rpertoire /foo/bar/ : MyResourceBundle.properties : ce fichier contient les messages de la langue par dfaut pour votre application. MyResourceBundle_XX.properties : ce fichier contient les mmes messages dans la langue dont le code ISO est XX
Ex : si votre langue par dfaut est l'anglais, vous aurez dans MyResourceBundle.properties une entre du type :
default.welcome=hello
Si vous souhaitez supporter le francais, vous aurez dans le fichier MyResourceBundle_fr.properties la mme entre :
default.welcome=bonjour
Il en sera de mme pour toutes les langues et vous aurez autant de fichiers .properties que de langues que vous supporterez. Il vous faudra ensuite dclarer ces ressources dans le descripteur de configuration de votre application (struts-config.xml) :
<message-resources parameter="foo.bar.MyResourceBundle" />
Attention: il ne faut pas prciser l'extension du fichier (.properties) et ne pas spcifier les codes ISO. Il faut aussi absolument veiller ce que le fichier soit accessible dans le CLASSPATH. Dans les pages JSP, il faut dclarer l'internationalisation avec l'attribut locale du tag <html:html> :
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <html:html locale="true"> .. page content ... </html:html >
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
La locale fait partie des attributs d'une requte http et est donc conserve durant la navigation. De plus, la JVM charge tous les bundles au dmarrage. Toutes les langues dfinies sont donc accessibles. Imaginons trois liens :
<html:link page='/switch.do?lang=fr&cty=FR'>FR</html:link> <html:link page='/switch.do?lang=en&cty=EN'>EN</html:link> <html:link page='/switch.do?lang=en&cty=US'>US</html:link>
Ces liens pointent sur une Action "SwitchAction" dfinie dans le mapping par l'alias "switch".
public class SwithLangAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //rcupration des paramtres passs et de l'url du referer String country = request.getParameter("cty"); String language = request.getParameter("lang"); String referer = request.getHeader("referer"); HttpSession session = request.getSession(); ActionForward forward = null; // dfinition de la locale setLocale( request, new Locale( language, country ) ); // redirection vers une page dfinie par dfaut if( referer==null ) { forward = (mapping.findForward("success")); } // redirection vers l'url du referrer. else { forward = new RedirectingActionForward(); forward.setPath( referer ); } } return forward;
Attention: certains serveurs ne transmettent pas le referer. Il faut donc explicitement le rcuprer (dans un ActionForm par exemple).
Comment formater une valeur d'un bean avec Struts ? : Les attributs "format" et "formatkey"
Auteur : Lionel Roux (aka RanDomX) Il faut utiliser l'attribut format du tag <bean:write>.
<bean:write name='mybean' property='number' format='#,##0.00' />
Ainsi, si la valeur numrique de la variable number de l'ActionForm rfrenc par "mybean" vaut 123456789, elle sera affiche 123,456,789.00, conformment au pattern #,##0.00 .
- 24 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Vous pouvez aussi localiser les patterns de formatage, pour diffrencier ceux-ci en fonction de la langue. Pour ce faire, il faut embarquer ceux-ci dans les bundles de ressources. Ex :
number.format=#,##0.00
Attention: le pattern utilis doit tre compatible avec la langue. Par exemple, '#,##0.00' ne fonctionnera pas avec la locale 'fr', puisque c'est un pattern anglais.
Comment charger plusieurs fichiers de ressources (bundles) sans avoir utiliser les cls des bundles ?
Auteur : Alwin Le principe consiste fusionner les resources-bundles au chargement. Voici la classe qui se charge de le faire (l'API commons Logging est utilise dans cet exemple pour la journalisation) :
package bla.bla.bla.struts; import java.io.InputStream; import java.util.Enumeration; import java.util.Properties; import import import import org.apache.commons.logging.Log; org.apache.commons.logging.LogFactory; org.apache.struts.util.MessageResourcesFactory; org.apache.struts.util.PropertyMessageResources;
public class MultiPropertyMessageResources extends PropertyMessageResources { protected static final Log log; public MultiPropertyMessageResources(MessageResourcesFactory factory, String config) { super(factory, config); log.info("Initializing, config='" + config + "'"); } public MultiPropertyMessageResources(MessageResourcesFactory factory, String config, boolean returnNull) { super(factory, config, returnNull); log.info("Initializing, config='" + config + "', returnNull=" + returnNull); } protected void loadLocale(String localeKey) { label0: { if(log.isTraceEnabled())
- 25 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
} locales.put(localeKey, localeKey);
String configFiles[] = config.split(","); for(int i = 0; i < configFiles.length; i++) { String name = configFiles[i].trim().replace('.', '/'); if(localeKey.length() > 0) name = name + "_" + localeKey; name = name + ".properties"; InputStream is = null; Properties props = new Properties(); try { if(log.isTraceEnabled()) log.trace(" Loading resource '" + name + "'"); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if(classLoader == null) classLoader = getClass().getClassLoader(); is = classLoader.getResourceAsStream(name); if(is != null) { props.load(is); is.close(); } if(log.isTraceEnabled()) log.trace(" Loading resource completed"); } catch(Throwable t) { log.error("loadLocale()", t); if(is != null) try { is.close(); } catch(Throwable u) { } } if(props.size() < 1) return; synchronized(messages) { String key; for(Enumeration names = props.keys(); names.hasMoreElements(); messages.put(messageKey(localeKey, key), props.getProperty(key))) { key = (String)names.nextElement(); if(log.isTraceEnabled()) log.trace(" Saving message key '" + messageKey(localeKey, key)); } } } }
return;
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Cette solution rgle bien videmment le problme pour toutes les ressources utilises par Struts, en particulier le plugin Validator. lien : lien : Comment dfinir les fichiers de localisation en dehors du classpath ? Comment utiliser plusieurs ResourceBundle avec Struts ?
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
import java.util.Enumeration; import java.util.Properties; import import import import org.apache.commons.logging.Log; org.apache.commons.logging.LogFactory; org.apache.struts.util.MessageResourcesFactory; org.apache.struts.util.PropertyMessageResources;
public class MultiPropertyMessageResources extends PropertyMessageResources { protected static final Log log; public MultiPropertyMessageResources(MessageResourcesFactory factory, String config) { super(factory, config); log.info("Initializing, config='" + config + "'"); } public MultiPropertyMessageResources(MessageResourcesFactory factory, String config, boolean returnNull) { super(factory, config, returnNull); log.info("Initializing, config='" + config + "', returnNull=" + returnNull); } protected void loadLocale(String localeKey) { label0: { if (log.isTraceEnabled()) log.trace("loadLocale(" + localeKey + ")"); synchronized (locales) { if (locales.get(localeKey) == null) break label0; } return; } locales.put(localeKey, localeKey); String configFiles[] = config.split(","); for (int i = 0; i < configFiles.length; i++) { String name = configFiles[i].trim().replace('.', '/'); if (localeKey.length() > 0) name = name + "_" + localeKey; name = name + ".properties"; InputStream is = null; Properties props = new Properties(); try { if (log.isTraceEnabled()) log.trace(" Loading resource '" + name + "'"); ClassLoader classLoader = Thread.currentThread() .getContextClassLoader(); if (classLoader == null) classLoader = getClass().getClassLoader(); is = classLoader.getResourceAsStream(name); if (is != null) { props.load(is); is.close(); } if (log.isTraceEnabled()) log.trace(" Loading resource completed"); } catch (Throwable t) { log.error("loadLocale()", t); if (is != null) try { is.close(); } catch (Throwable u) { } }
- 28 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
if (props.size() < 1) { try { is = new URL(name).openStream(); props.load(is); is.close(); } catch (Throwable t) { log.error("loadLocale()", t); } } if (props.size() < 1) { log.warn("Unable to load resource " + name); return; } synchronized (messages) { String key; for (Enumeration names = props.keys(); names.hasMoreElements(); messages .put(messageKey(localeKey, key), props.getProperty(key))) { key = (String) names.nextElement(); if (log.isTraceEnabled()) log.trace(" Saving message key '" + messageKey(localeKey, key)); } } } }
return;
lien : Comment charger plusieurs fichiers de ressources (bundles) sans avoir utiliser les cls des bundles ?
- 29 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Formulaires Comment factoriser plusieurs actions ralisables sur un seul ActionForm ? : Le DispatchAction
Auteurs : c_nvy - Lionel Roux (aka RanDomX) - Ricky81 Il est souvent pratique de pouvoir raliser plusieurs actions sur un mme formulaire. Par exemple, pour la gestion d'un panier virtuel, il est possible d'ajouter, de modifier ou de supprimer un lment. Pour raliser simplement ce genre de tche, on peut utiliser le DispatchAction qui concentre en une seule action, l'ensemble des oprations ralisables sur une seule JSP. On utilise un simple JavaScript qui modifie la valeur d'un champ cach lors de la soumission.
<SCRIPT> function setHidden(value){document.formulaire.hidden.value=value;} </SCRIPT>
Dans le formulaire:
<html:form action="/cartManagement"> ... <html:hidden property="hidden" value="default"/> ... <html:submit onclick="setHidden('add');">ADD ELEMENT</html:submit> </html:form>
Ensuite dans l'Action concerne, il suffit de crer les mthodes portant les mmes noms que les valeurs possibles du champs hidden la place de la mthode execute(...).
public class CartAction extends DispatchAction { public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... } public ActionForward remove(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... } public ActionForward modify(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... } }
Dans le fichier de configuration struts-config.xml, il faut ajouter la dclaration de l'action l'attribut "parameter" et lui indiquer le nom du champ concern.
<action path="/cartManagement" type="app.management.CartAction" name="cartForm" scope="request" validate="true" input="/page.jsp" parameter="hidden"/>
- 30 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Il est aussi possible de crer des boutons dont les noms sont les noms des mthodes, car le nom d'un bouton est aussi la valeur renvoye par celui-ci.
Dans la JSP, les boutons sont nomms grce une cl du Comment grer l'internationalisation (I18N) et/ ou la localisation avec Struts ? : Le ResourceBundle.
<html:form action="/cartManagement"> <html:submit property="monAction"> <bean:message key="button.add"/> </html:submit> <html:submit property="monAction"> <bean:message key="button.delete"/> </html:submit> </html:form>
Les valeurs passes sont ainsi localises et changent donc en fonction de la locale. Pour mapper ces valeurs une mthode particulire, on ajoute l'Action une mthode qui est appele lors de la soumission :
protected Map getKeyMethodMap() { Map map = new HashMap(); map.put("button.add", "add"); map.put("button.delete", "delete"); return map; }
- 31 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Le reste est identique au Comment factoriser plusieurs actions ralisables sur un seul ActionForm ? : Le DispatchAction. lien : Comment utiliser le LookupDispatchAction avec un lien dans la jsp ?
De plus le fait d'utiliser html:cancel vite la validation du formulaire. Attention : il ne faut pas mettre d'attribut "property" dans le tag html:cancel car sinon plus rien ne marchera. En effet, la validation sera de nouveau effective et l'action voudra appeler la valeur de l'attribut property (identique au tag html:submit). lien : Comment factoriser plusieurs actions ralisables sans JavaScript ? : Le LookupDispatchAction
On obtient le message d'erreur suivant induit par l'lment de formulaire identifi par "submit" :
document.forms[0].submit is not a function
- 32 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Formulaires > Validation Comment valider les donnes d'un formulaire avec Struts ?
Auteur : Lionel Roux (aka RanDomX) Struts offre deux principaux mcanismes de validations des donnes saisies dans les formulaires: Par validation, on entend deux choses : Bien que les deux systmes sont mme de faire les deux, on utilise usuellement le plug-in Validator pour les contrles de surface, puisqu'il ne ncessite pas d'aller-retour entre le client et le serveur, et la mthode validate() des ActionForms pour la validation smantique. une validation dite de contrle de surface ou qualitative : il s'agit de vrifier que les donnes saisies sont bien dans la forme attendue (ex : une donne numrique ne contient que des chiffres). une validation smantique : il s'agit de vrifier que la valeur saisie est bien celle qui est attendue par le systme (ex : un numro de carte bleue valide). Comment valider ses donnes avec le plug-in Validator de Struts ? Comment valider ses donnes avec la mthode validate() de l'ActionForm ?
lien : Comment valider ses donnes avec la mthode validate() de l'ActionForm ? lien : Comment valider ses donnes avec le plug-in Validator de Struts ?
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Pour que la validation se fasse galement ct client, il convient de suivre les points suivants : que la page JSP intgre le tag <html:javascript formName="logonForm"> dans le header. que le formulaire intgre l'appel la fonction JS gnre (par dfaut validateNomDuFormulaire) <html:form .... onsubmit="return validateLogonForm(this)">
Il existe un ensemble de cls prdfinies pour les messages d'erreurs les plus communs. Pensez les ajouter dans votre fichier de messages. Ci-dessous la liste des messages les plus courants :
errors.required={0} est obligatoire. errors.invalid={0} est invalide. errors.maxlength={0} ne peut pas avoir plus de 8 caractre(s). errors.minlength={0} ne peut pas avoir moins de {1} caractre(s). errors.range={0} n'est pas dans l'intervalle de {1} {2}. errors.byte={0} doit tre un nombre du type byte. errors.date={0} incorrecte. errors.double={0} doit tre un nombre du type double. errors.float={0} doit tre un nombre du type float. errors.integer={0} doit tre un nombre du type Integer. errors.long={0} doit tre un nombre du type long. errors.short={0} doit tre un nombre du type short. errors.creditcard={0} n'est pas un numro de carte de crdit valide. errors.email={0} n'est pas une adresse e-mail valide.
lien :
- 34 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
lien :
Ainsi, si vous avez besoin d'crire du code Javascript complmentaire pour la validation de certains lments du formulaire, vous n'aurez plus vous soucier du nom de ce dernier :
function maValidation(form) { if (...) { } } return strutsValidation(form);
<html:javascript name="monForm" method="strutsValidation" /> ... <html:form action="/monAction" onsubmit="return maValidation(this);"> ... </html:form>
lien :
- 35 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
L'exemple ci-dessous montre l'appel de la validation classique par l'intermdiaire de la mthode validate, l'ajout d'un message particulier, l'enregistrement des messages d'erreur, puis la gestion de la navigation. Ce code a pour prrequis, dans le mapping de l'action, d'avoir positionn l'attribut validate "false" et d'avoir renseign l'attribut input.
// Validation du formulaire ActionMessages errors = form.validate(mapping, request); // Appel backoffice boolean existeDoublon = monService.rechercherDoublon(form.getNom()); if (existeDoublon) { ActionError error = new ActionError("nom.existant"); errors.add("nom", error); } if ( !errors.isEmpty() ) { this.saveErrors(request, errors); return mapping.getInputForward() ; }
lien :
- 36 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Formulaires > Checkbox et Radiobutton Comment fonctionnent les checkboxes dans Struts ?
Auteurs : Lionel Roux (aka RanDomX) - OButterlin Les checkboxes ont un fonctionnement particulier. En effet, une checkbox ne renvoie la valeur spcifie dans l'attribut value que si elle est coche.
<html:checkbox property="someprop" value="true">Yes</html:checkbox>
Si la checkbox n'est pas coche, alors vous devez explicitement donner une valeur (si vous en avez besoin). Dans le cas contraire, vous ne serez pas capable de dtecter qu'une checkbox initialement coche a t dcoche. Une pratique courante pour contourner ce problme consiste associer dans l'ActionForm un membre boolen l'tat de la checkbox, et d'implmenter la mthode reset de l'ActionForm et d'y rinitialiser la valeur false. Ainsi, entre la soumission du formulaire et la magie du remplissage automatique des membres de l'ActionForm, la mthode reset sera appele et assurera la prise en compte d'un dcochage.
public class MonForm extends ActionForm { boolean alerterParMail = false; public void reset(ActionMapping mapping, HttpServletRequest request) { super.reset(mapping,request); alerterParMail = false; }
- 37 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Il s'agit galement de dfinir la proprit de l'lment utiliser pour dfinir la valeur associe au bouton radio (cf. value).
<logic:iterate name="uneCollection" id="element"> <html:radio property="nomRadio" idName="element" value="id"> <bean:write name="element" value="nom"/> </html:radio> </logic:iterate>
Ainsi, les valeurs possibles au niveau du formulaire pour l'lment identifi "nomRadio" seront celles de la proprit id de chaque objet de la collection.
- 38 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Formulaires > Listes Comment utiliser les listes droulantes avec Struts
Auteur : c_nvy Un tag html:select doit tre dans un tag html:form afin de pouvoir rcuprer le (ou les) lments slectionns dans la liste droulante. Struts utilisant par dfaut le form-bean rfrenc dans le mapping de l'Action via l'attribut name, il n'est pas utile de coder l'attribut name="nomDuFormBean" dans le tag html:select. Dans l'attribut property du tag html:select, il faut spcifier le nom de la proprit qui contiendra la (ou les) valeur(s) slectionne(s). Slection simple
<html:select property="selectedItem">
La proprit selectedItem doit tre dfinie dans l'ActionForm avec getter et setter et doit tre de type String. Slection multiple
<html:select property="selectedItems" multiple="true">
La proprit selectedItems doit tre dfinie dans l'ActionForm avec getter et setter et doit tre de type String[]. Pour afficher les options de la liste droulante, il y a plusieurs possibilits : 1) Dans le cas o la collection a t mise dans le scope via un setAttribute, elle doit tre rfrence dans le tag html:options ou html:optionsCollection via l'attribut name. S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci :
<html:select property="selectedItem"> <html:options name="uneCollection"/> </html:select>
ou
<html:select property="selectedItem"> <html:optionsCollection name="uneCollection" value="id" label="libelle"/> </html:select>
La proprit id spcifie dans l'attribut property correspond la valeur renvoye si celle-ci est slectionne et la proprit libelle spcifie dans l'attribut labelProperty est le label qui s'affiche dans la liste droulante.
- 39 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
2) Dans le cas o la collection est une proprit de l'ActionForm et que celle-ci est initialise via le setter de l'ActionForm dans une Action qui s'excute avant l'affichage du formulaire, elle doit tre rfrence dans le tag html:options ou html:optionsCollection via l'attribut property. S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci :
<html:select property="selectedItem"> <html:options property="uneCollection"/> </html:select>
S'il s'agit d'une collection de LabelValueBean, celui-ci ayant pour proprit value et label, il n'est pas utile de coder les attributs value et label dans le tag html:optionsCollection :
<html:select property="selectedItem"> <html:optionsCollection property="uneCollection"/> </html:select>
Si on veut slectionner par dfaut un lment de la liste droulante, il suffit d'initialiser la proprit correspondante de l'ActionForm dans l'Action qui s'excute avant l'affichage du formulaire via le code suivant :
UneActionForm uneActionForm = (UneActionForm) form; uneActionForm.setSelectedItem(variableContenantLaValeurParDefaut);
Ceci implique que le form-bean soit rfrenc via l'attribut name dans le mapping de cette Action dans le struts-config.xml. Dans le cas o la valeur par dfaut est fixe, il est possible d'initialiser la proprit selectedItem dans la mthode reset() dans le cas d'une ActionForm, ou dans l'attribut initial de la balise form-property dans le cas d'une DynaActionForm.
Comment construire des listes de choix dynamiques et dpendantes avec Struts ?: Les DropDownBox.
Auteur : Lionel Roux (aka RanDomX) Les DropDownBox sont utilises par exemple quand on choisit une valeur dans une premire liste, on souhaite restreindre les valeurs possibles dans une seconde liste.
<html:form name= "myform"> <html:select property="list1" onchange="document.myform.submit()"> ... </html:select> <html:select property="list2">
- 40 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Lors d'un changement, un premier submit est dclench par l'vnement "onchange" de la liste list1. Lors de cette soumission, il faut dans l'Action ou dans l'ActionForm dfinir les valeurs possibles retournes pour la liste list2. Ainsi, celles-ci seront affiches lors du raffichage du formulaire.
Comment slectionner par dfaut un lment particulier d'une liste dans un formulaire ? : L'attribut "value"
Auteurs : Lionel Roux (aka RanDomX) - mezoo Il suffit de positionner l'attribut value du tag select la valeur souhaite. Ex :
<html:select name="myForm" property="sex" value="M"/> <html:option value="M">M</html:option> <html:option value="F">F</html:option> </html:select>
Une variante avec association directement de la valeur au formulaire (cas d'un scnario d'dition) consiste dfinir la valeur de la slection dans l'action prparant l'affichage de la page :
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MonForm monForm = (MonForm) form; ... String valeurSelectionnee = ... form.setValeurSelection(valeurSelectionnee); ...
- 41 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Formulaires > Fichiers Comment uploader un fichier vers un serveur avec Struts ?
Auteur : Lionel Roux (aka RanDomX) Il faut dclarer un formulaire d'envoi du fichier dans la JSP:
<html:form action="/upload.do?from=sender" method="post" enctype="multipart/form-data"> <html:file property="fichier"/> ... </html:form>
Ensuite, il faut crer un bean que l'on nommera pour l'exemple "UploadForm" :
public class UploadActionForm extends ActionForm { protected FormFile fichier; public FormFile getFichier() { return fichier; } public void setFile(FormFile fichier) { this.fichier = fichier; } ...
Voila, vous avez votre objet implmentant FormFile [org.apache.struts.upload] , que vous pouvez manipuler sur le serveur.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
OutputStream os = response.getOutputStream(); FileInputStream stream = new FileInputStream(f); BufferedInputStream bis = new BufferedInputStream(stream); InputStream is = new BufferedInputStream(bis); int count; byte buf[] = new byte[4096]; while ((count = is.read(buf)) > -1) { os.write(buf, 0, count); } is.close(); os.close();
Ceci provoque l'ouverture d'une bote de dialogue vous invitant enregistrer localement le fichier, et vous redirige vers la ressource correpondant au mapping "fichieenvoye".
- 43 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
- 44 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Liens Comment enrichir une URL avec la valeur d'une proprit d'un bean local?
Auteur : Lionel Roux (aka RanDomX) Si la valeur passer se trouve dans un bean, il faut rcuprer celle-ci dans un bean local avec le tag <bean:define>
<bean:define id="myBeanValue" name="myBean" property="myProperty" /> <html:link href="action.do?prop='${myBeanValue}'" />
- 45 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Dans l'action :
public ActionForward ajouter(...) {...} public ActionForward modifier(...) {...} protected Map getKeyMethodMap() { Map map = new HashMap() ; map.put("bouton.ajouter", "ajouter"); map.put("bouton.modifier", "modifier"); return map ; }
Dans le ResourceBundle :
bouton.ajouter=Ajouter bouton.modifier=Modifier
Cependant, on n'exploite pas compltement les possibilits du LookupDispatchAction car on passe "en dur" le libell de la cl correspondant la mthode contrairement au cas d'un bouton de type submit o la cl du libell est suffisante pour retrouver la mthode excuter. Une solution consiste utiliser les possibilits du tag <html:link> conjugues l'utilisation du tag <bean:define> :
<bean:define id="actionAjouter"> <bean:message key="bouton.ajouter"/> </bean:define> <html:link action="tonAction" paramId="action" paramName="actionAjouter"> <bean:message key="bouton.ajouter"/> </html:link>
lien : lien :
Comment factoriser plusieurs actions ralisables sans JavaScript ? : Le LookupDispatchAction Comment enrichir une URL avec la valeur d'une proprit d'un bean local?
- 46 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Une fois que vous avez construit tous vos ActionMessage, vous devez les ajouter un ActionErrors. C'est cet objet qui sera retourn.
ActionErrors errors = new ActionErrors(); errors.add(ActionMessages.GLOBAL_MESSAGE, am); .. return errors;
Il est noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage. Egalement le paramtre ActionMessages.GLOBAL_MESSAGE peut tre remplac par ActionErrors.GLOBAL_ERROR dans les premires versions.
- 47 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Il est noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage.
Il est noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage. lien : Comment afficher un message en retour d'une action ?
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Ceci peut tre fait dans la limite de 3 lments configurables. Il est noter que pour d'anciennes versions de Struts, il sera fait usage de la classe ActionError en lieu et place de ActionMessage.
Attention : ce code semble ne pas fonctionner sous Websphere cause de l'utilisation de constantes dans la JSP. Il fonctionne trs bien sous Tomcat. 2) Utilisation de taglib logic:present et de l'objet ERROR
<logic:present name="org.apache.struts.action.ERROR"> faire quelque chose de spcifique en cas d erreur </logic:present>
Remarque : Si Struts modifie la dfinition de la constante, ce code ne fonctionnera plus ! 3) Implmenter un TagLib : La TLD
<tag> <name>isErrors</name> <tag-class>package.tags.ErrorsTag</tag-class> <description>Indique s'il y a des messages d'erreur</description> <attribute> <name>name</name>
- 49 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
La TLD
<required>false</required> <type>java.lang.String</type> <description> Nom du bean(dans n'importe quel scope) sous lequel les messages d'erreur ont t stocks. S'il n'est pas dfini, c'est le nom spcifi par la constante <code>Globals.ERROR_KEY</code> qui est utilis. </description> </attribute> </tag>
Implmentation
import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; import org.apache.struts.Globals; public class ErrorsTag implements Tag { private String name = Globals.ERROR_KEY; private Tag parent; private PageContext pageContext; public int doEndTag() throws JspException { return EVAL_PAGE; } protected boolean test() { return pageContext.getRequest().getAttribute(name) == null; } public int doStartTag() throws JspException { int eval; // On teste ici l'existence du bean dans la request if (test()) { eval = SKIP_BODY; } else { eval = EVAL_BODY_INCLUDE; } return eval; } public Tag getParent() { return parent; } public void release() { } public void setPageContext(PageContext arg0) { pageContext = arg0; } public void setParent(Tag arg0) { parent = arg0; } public String getName() { return name; } public void setName(String name) { this.name = name;
- 50 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Implmentation
} }
Utilisation
<X:isErrors> faire quelque chose de spcifique en cas d erreur </X:isErrors>
Pour dfinir l'opration inverse, savoir dtecter lorsqu'il n'y a pas d'erreur, il suffit par exemple de dfinir une nouvelle TagLib qui hrite de la prcdente et redfinit la mthode test. lien : Comment valider les donnes d'un formulaire avec Struts ?
- 51 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Le libell du message (correspondant la cl error.message dans l'exemple) doit tre dclar dans le fichier properties d'internationalisation. Ce message est paramtrable, comme indiqu dans la question sur l'affichage d'un message d'erreur (cf. lien). La rcupration du message dans la page jsp s'effectue via le tag <html:messages> :
<html:messages id="idMessage" message="true"> <bean:write name="idMessage"/> </html:messages>
idMessage tant le nom de la variable permettant de boucler sur la liste des messages. message="true" indiquant que ce sont les messages (ActionMessages) et non les erreurs (ActionErrors) que l'on souhaite afficher. Pour afficher un message en particulier, et non la liste des messages comme indiqu prcdemment, il suffit de prciser le nom de la variable contenant le message dans l'attribut property du tag <html:messages> comme ceci :
<html:messages id="idMessage" property="message1" message="true"> <bean:write name="idMessage" /> </html:messages>
lien :
- 52 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
javax.sql.DataSource dataSource; java.sql.Connection myConnection; try { dataSource = getDataSource(request); myConnection = dataSource.getConnection(); // faire ici le traitmement partir de la connexion. } catch (SQLException sqle) { ... } finally { try { myConnection.close(); } catch (SQLException e) { getServlet().log("Connection.close", e); } }
lien :
lien :
- 53 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Scurit Comment appliquer la gestion de la scurit par le conteneur avec Struts ?
Auteur : Lionel Roux (aka RanDomX) Les invocations d'actions Struts peuvent tre protges au mme titre que n'importe quelle url d'une application Web. Pour ce faire on utilise le mcanisme de scurit du conteneur. En configurant le fichier web.xml, vous pouvez restreindre certains patterns d'url un certain type d'utilisateurs. Par exemple, vous pouvez choisir de restreindre "/restricted/*" au rle "admin".
<security-constraint> <web-resource-collection> <web-resource-name> restricted </web-resource-name> <url-pattern>/restricted/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
Ainsi, l'Action "/myAction" est accessible par tous les utilisateurs. En revanche, l'Action "/restricted/ myProtectedAction" n'est accessible que par le groupe "admin". Pour plus d'information, lisez la documentation de votre conteneur de servlet concernant la scurit.
- 54 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Ces lments permettent de passer des valeurs d'attributs au plug-in. Exemple de dclarations de plug-ins :
<plug-in className="foo.bar.MyPlugIn"> <set-property property="path" value="/WEB-INF/my.xml"/> </plug-in> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in>
- 55 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Sommaire > Trucs et Astuces Comment dfinir une Action comme une page d'accueil d'une application ?
Auteur : Lionel Roux (aka RanDomX) Le conteneur de Servlet attend d'un fichier de bienvenue rfrenc dans un noeud <welcome-file> qu'il soit un fichier physique (une page JSP, un fichier plat...). Ainsi vous ne pouvez pas mapper directement une Action comme fichier de bienvenue. Toutefois, il est possible de dfinir dans une page JSP trs simple, un forward automatique grce la balise <logic:forward>. Ce forward se chargera alors de retourner l'action demande. Dans le fichier struts-config.xml :
<action path="/monaction" ... type="foo.bar.MonType" />
L'ouverture de l'application web monapplication retourne le rsultat de l'Action mappe par monaction.
Si la fin de votre Action vous choisissez le <forward> de nom "jsp", Struts va vous renvoyer la page jsp.jsp, mais sans changer l'url http://monserveur/monapplication/monAction.do dans votre navigateur.
- 56 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Or il peut tre intressant ou souhait parfois de changer l'url affiche dans le navigateur pour laisser apparatre la vritable url de la ressource affiche. Struts fournit pour cela un attribut qu'il suffit d'ajouter dans l'lment <forward>: l'attribut redirect="true". Ainsi dans l'exemple prcdent, cela donnerait :
<action path="/monAction" type="struts.action.MonAction" name="monActionForm" scope="session" input="/ma.jsp" validate="true"> <forward name="jsp" path="/jsp.jsp" redirect="true"/> <forward name="..." .../> </action>
Pour rsoudre une fois pour toute ce satan problme, voici ce que j'utilise pour ma part : Dans un premier temps, je cre un Converter :
package bla.bla.bla.utils; import java.text.ParseException; import java.util.Date; import org.apache.commons.beanutils.Converter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class DateConverter implements Converter { private static final Log logger = LogFactory.getLog(DateConverter.class); private Object defaultValue = null; public DateConverter() { this.defaultValue = null; } public DateConverter(Object defaultValue) { this.defaultValue = defaultValue; } public Object convert(Class type, Object value) { if (value == null) { return (defaultValue);
- 57 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
} if (value instanceof Date) { return (value); } try { return WrapperUtil.toDate(value.toString()); } catch (ParseException e) { logger.debug("Unable to convert " + value + " into Date format."); return defaultValue; } } }
La classe WrapperUtil doit contenir une mthode statique assurant le formatage et le parsing selon un pattern configurable, j'utilise spring pour injecter le pattern en gnral... A vous d'implmenter cette classe en fonction de votre application... Une fois ce Converter crit et test, il faut l'ajouter la table des converters utiliss par les BeanUtils. Pour cela on dclare un plug-in Struts :
package bla.bla.bla.struts.plugin; import javax.servlet.ServletException; import import import import org.apache.commons.beanutils.ConvertUtils; org.apache.struts.action.ActionServlet; org.apache.struts.action.PlugIn; org.apache.struts.config.ModuleConfig;
import bla.bla.bla.DateConverter; public class StrutsBootstrapPlugin implements PlugIn{ public void destroy() { } public void init(ActionServlet actionServlet, ModuleConfig moduleConfig) throws ServletException { ConvertUtils.register(new DateConverter(), java.util.Date.class); } }
- 58 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
Il n'en faut pas plus pour que Struts sache convertir dfinitivement de lui-mme les String en Date lors de la population d'un formBean.
Pourquoi ma page HTML est-elle tronque l'affichage suite l'excution d'une action Struts ?
Auteur : jak0 L'action Struts couple la page JSP utilise un buffer pour gnrer le code HTML envoyer sur le navigateur client. Au fur et mesure de son remplissage par la Servlet, le buffer est vid et envoy au client. Si une erreur se produit pendant l'excution de la Servlet, l'excution se termine, le buffer en cours est dtruit et n'est pas envoy. Toutefois comme les buffers prcdents ont bien t envoys (flush), le code HTML affich par le navigateur se retrouve tronqu. La troncature du code HTML ne se trouve pas forcment l'endroit de la dernire criture prcdant l'erreur, car le buffer qui tait en cours a t dtruit. Il faut donc chercher un peu plus loin.
S'il n'y a pas de formulaire associ l'action, omettre l'attribut "name". Crer une action adapte de la suivante :
public class DocumentAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Typer la rponse //response.setContentType(""); // response.setContentLength(1000); //response.setCharacterEncoding(""); // Calculer le flux renvoyer au client byte[] bytes = null; // Envoyer le flux dans la rponse OutputStream os = response.getOutputStream(); os.write(bytes); os.close(); // Retourne null pour dire Struts de ne rien faire
- 59 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/
La FAQ Struts
return null;
Voici une implmentation possible pour envoyer un flux XML (pour Ajax) :
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Typer la rponse response.setContentType("text/xml"); response.setCharacterEncoding("iso-8859-1"); // Calculer le flux renvoyer au client byte[] bytes = null; StringBuffer xml = new StringBuffer(); xml.append("<?xml version='1.0' encoding='ISO-8859-1' ?>"); xml.append("<reponse>"); xml.append("</reponse>"); bytes = xml.toString().getBytes(); // Envoyer le flux dans la rponse OutputStream os = response.getOutputStream(); os.write(bytes); os.close(); // Retourne null pour dire Struts de ne rien faire return null;
- 60 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2003 - 2009 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.
http://javaweb.developpez.com/faq/struts/