Vous êtes sur la page 1sur 60

La FAQ Struts

Date de publication : 17 mai 2003 Dernire mise jour : 2 juillet 2013

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

Ont contribu cette FAQ :

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

Sommaire > Informations Comment bien utiliser cette FAQ ?


Auteur : L'quipe Java Le but : Cette faq a t conue pour tre la plus simple possible d'utilisation. Elle tente d'apporter des rponses simples et compltes aux questions auxquelles sont confronts tous les dbutants (et les autres). L'organisation : Les questions sont organises par thme, les thmes pouvant eux-mme contenir des sous-thmes. Lorsqu'une question porte sur plusieurs thmes, celle-ci est insre dans chacun des thmes rendant la recherche plus facile. Les rponses : Les rponses contiennent des explications et des codes sources. Certaines sont compltes de fichier tlcharger contenant un programme de dmonstration. Ces programmes sont volontairement trs simples afin qu'il soit ais de localiser le code intressant. Les rponses peuvent galement tre compltes de liens vers d'autres rponses, vers la documentation en ligne de Sun ou vers un autre site en rapport. Nouveauts et mises jour : Lors de l'ajout ou de la modification d'une question/rponse, un indicateur est plac cot du titre de la question. Cet indicateur reste visible pour une dure de 15 jours afin de vous permettre de voir rapidement les modifications apportes. J'espre que cette faq pourra rpondre vos questions. N'hsitez pas nous faire part de tous commentaires/remarques/critiques. lien : Comment participer cette FAQ ?

Comment participer cette FAQ ?


Auteur : L'quipe Java Cette faq est ouverte toute collaboration. Pour viter la multiplication des versions, il serait prfrable que toutes collaborations soient transmises aux administrateurs de la faq. Plusieurs comptences sont actuellement recherches pour amliorer cette faq : Rdacteur : Bien videmment, toute nouvelle question/rponse est la bienvenue. Web designer : Toute personne capable de faire une meilleure mise en page, une feuille de style ou de belles images... Correcteur : Malgr nos efforts, des fautes d'orthographe ou de grammaire peuvent subsister. Merci de contacter les responsables si vous en dbusquez une... Idem pour les liens errons. lien : Quels sont les droits de reproduction de cette FAQ ?

Quels sont les droits de reproduction de cette FAQ ?


Auteur : L'quipe Java Les sources prsents sur cette pages sont libre de droits et vous pouvez les utiliser votre convenance. Par contre cette page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2004 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
-4Les 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

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 ?

O trouver d'autres sources d'information ?


Auteur : L'quipe Java Les cours et didacticiels de www.developpez.com Les forums de la rubrique Java de www.developpez.com La FAQ Gnral Java La FAQ JDBC La FAQ Java EE La Javadoc : toutes les informations utiles sur les classes, leurs mthodes ... toujours avoir sous la main. Le site officel du projet Struts

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

Sommaire > Gnralits Qu'est-ce que Struts?


Auteur : Lionel Roux (aka RanDomX) Selon la dfinition des auteurs, Struts est un framework Open Source crit entirement en JAVA qui permet de construire des applications Web. Struts est construit autour de technologies qui ont fait leurs preuves comme les servlets JAVA, les JavaBeans, le formalisme XML, ... . Struts implmente le design pattern MVC Model 2. Le framework Struts fournit le minimum vital pour construire une application Web professionnelle. Struts est un projet soutenu par l'Apache Software Foundation. La page officelle se trouve cette adresse: http://struts.apache.org/.

Struts est-il le meilleur choix pour construire mes applications Web?


Auteur : Lionel Roux (aka RanDomX) Disons le tout de suite, Struts n'est pas la panace ! Pour crire une application Web trs simple, Struts introduit un niveau de complexit et de mise en route trop important. En revanche, ds qu'une application prends de l'importance, Struts peut rapidement simplifier les choses.

Qui a crit Struts ?


Auteur : Lionel Roux (aka RanDomX) Struts a t cre par Craig R. McClanahan, puis offert la fondation Apache en Mai 2000. Craig Mc Clanahan a aussi t l'origine de Tomcat 4, l'implmentation officielle de rfrence des conteneurs Servlet 2.3 et JSP 1.2. Il est aujourd'hui le lead manager du projet Java Server Faces (JSR-127) et l'architecte de la couche de presentation Web de la plateforme J2EE chez Sun. 17 autres personnes contribuent activement au dveloppement de ce projet.

Struts peut-il tre utilis dans une application commerciale ?


Auteur : Lionel Roux (aka RanDomX) Struts est distribu sous licence ASF. Struts peut donc tre utilis dans des applications commerciales dans le respect de ce qui est inscrit dans cette licence.

-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.

Comment changer le nom ou l'emplacement du fichier struts-config.xml ?


Auteurs : Alwin - Lionel Roux (aka RanDomX) - Ricky81 Le nom et l'emplacement du fichier struts-config.xml est spcifi par le paramtre d'initialisation config dans la dclaration de la servlet ActionServlet. Le chemin vers ce fichier est donn relativement au contexte. L'exemple suivant est identique une dclaration sans section <init-param> (valeur par dfaut) :
<web-app> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config<param-name>

-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

<param-value>/WEB-INF/struts-config.xml<param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> ... </web-app>

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.

Comment dclarer le fichier de configuration d'un module Struts ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 La configuration se fait comme pour une application mono-module, la diffrence prs que le nom du paramtre d'initialisation est suffix par le nom du module :
<web-app> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config/moduleXXX<param-name> <param-value>/WEB-INF/struts-config_moduleXXX.xml<param-value> </init-param> </servlet> ... </web-app>

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 ?

Comment utiliser plusieurs fichiers de configuration pour un module Struts ?


Auteurs : Lionel Roux (aka RanDomX) - Lunatix Pour utiliser plusieurs fichiers de configuration pour un seul module Struts, il suffit de les dclarer dans le paramtre d'initialisation config, spars par une virgule. Par exemple, pour le module par dfaut :
<init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml,/WEB-INF/struts-config2.xml </param-value> </init-param>

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 ?

Comment configurer les fichiers de bienvenue ?


Auteur : Lionel Roux (aka RanDomX) La ou les pages d'accueil d'une application web est configure par le paramtre welcome-file-list. Par exemple si vous souhaitez afficher la page monindex.jsp comme page d'entre de l'application, il faut le dclarer comme ceci:
<web-app> <welcome-file-list> <welcome-file>monindex.jsp</welcome-file> </welcome-file-list> </web-app>

Vous pouvez spcifier plusieurs lments <welcome-file> lien : Comment dfinir une Action comme une page d'accueil d'une application ?

Comment configurer les taglibs de Struts pour l'application web ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 Struts est livr avec des bibliothques de balises standards. Pour pouvoir les utiliser dans les pages JSP, il faut les dclarer leurs descripteurs dans le fichier de configuration web.xml. Quelle que soit la taglib, sa dclaration prends la forme suivante:
<web-app> ... <taglib> <taglib-uri>AliasTaglib;</taglib-uri> <taglib-location>CheminRelatifAuContexte/NomDuDescripteur</taglib-location> </taglib> </web-app>

Par exemple pour la taglib html de Struts:


<web-app> ... <taglib> <taglib-uri>StrutsHtml</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> </web-app>

Dans la JSP, il faut ensuite faire rfrence la taglib:


-9Les 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

<%@ taglib uri="StrutsHtml" prefix="html" %> <html:html> ... </html:html>

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 ?

Comment permettre/empcher l'encodage en HTML dans un bean:write ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 L'attribut filter du tag <bean:write> permet d'echapper l'encodage. Si il est renseign la valeur "true" (valeur par dfaut), les lments seront remplas par leur quivalent HTML. exemple :
<bean:define id="test"> <br/> </bean:define> <%-- gnre &lt;br&gt; pour afficher <br/> --%> <bean:write name="test" filter="true" /> <%-- gnre <br/> pour gnrer un saut de ligne --%> <bean:write name="test" filter="false" />

- 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 :

Comment vrifier si l'utilisateur est identifi et si sa session n'a pas expir?


Auteur : Sniper37 Une manire de faire est d'tendre la classe org.apache.struts.action.RequestProcessor qui ralise un certain nombre de traitements en amont de l'excution du code d'une action. Cette solution est d'autant plus intressante si vous utilisez des actions varies dans votre application (Action, DispatchAction, ...). Pour que Struts prenne en compte la nouvelle classe, modifier le struts-config.xml :
<controller> <set-property property="processorClass"value="com.developpez.faq.struts.FaqRequestProcessor"/> </controller>

Dans notre nouvelle classe, il nous faudra crire le code suivant :


// On verifie si l'utilsateur est bien connect protected boolean isUserConnected(HttpServletRequest request) { if (request != null) { HttpSession session = request.getSession(false); if (session != null) { User user = (User) session.getAttribute("user"); } return user != null; } return false;

// 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;

Comment rajouter des lments de configuration aux actions ?


Auteur : blbird Il vous suffit de crer une classe hritant de ActionMapping, et y rajouter les paramtres voulus. Ici par exemple le paramtre level est dclar :
public class MonActionMapping extends ActionMapping { private String level = null; public MonActionMapping() { super(); } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; }

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.

Comment configurer un DynaActionForm (ActionForm dynamique) ?


Auteur : Lionel Roux (aka RanDomX) Pour dclarer un DynaActionForm 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="monDynaBean" type="org.apache.struts.action.DynaActionForm"> </form-bean> ... </form-beans>

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" />

Conmment configurer la gestion d'une exception globale ?


Auteur : Lionel Roux (aka RanDomX) Pour dclarer une exception en tant qu'exception globale dans le fichier struts-config.xml, il faut ajouter un noeud <exception> au noeud <global-exceptions> :
<global-exceptions> <exception key="error.database.failure" path="/dbfailure.jsp" scope="request" type="com.developpez.DatabaseException" /> </global-exceptions>

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 ?

Comment configurer une exception spcifique une Action ?


Auteur : Lionel Roux (aka RanDomX) Pour dclarer une exception en tant qu'exception spcifique une action dans le fichier struts-config.xml, il faut ajouter un noeud <exception> au noeud <action> :

- 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

<action> ... <exception key="error.database.failure" path="/myactionerror.jsp" scope="request" type="com.developpez.DatabaseException" /> </action>

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 ?

Comment configurer plusieurs datasources utilisables par Struts ?


Auteur : Lionel Roux (aka RanDomX) Si vous avez besoin d'utiliser plusieurs DataSources dans votre application Struts, vous pouvez utiliser l'attribut key du noeud <data-source>, comme ceci:
<data-sources> <data-source key="FirstDataSource" type="org.apache.commons.dbcp.BasicDataSource"> ... <!-- idem question prcdente --> ... </data-source> <data-source key="SecondDataSource" type="org.apache.commons.dbcp.BasicDataSource"> ... <!-- idem question prcdente --> ... </data-source> ...

- 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 :

Comment utiliser plusieurs DataSources avec Struts?

Comment changer la classe d'implmentation du pool de connection d'une datasource ?


Auteur : Lionel Roux (aka RanDomX) Par dfaut, Struts utilise la classe org.apache.struts.util.GenericDataSource comme implmentation de l'interface javax.sql.Datasource. Il est cependant possible de changer cette implmentation par une autre, comme par exemple celle fournie avec Oracle. Pour ce faire, il suffit de spcifier le nom qualifi de cette classe comme valeur de l'attribut type dans le noeud <data-source>
<data-sources> <data-source type="oracle.jdbc.pool.OracleDataSource"> ... </data-source> </data-sources>

- 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 ?

Comment accder au ResourceBundle partir d'une action Struts ?


Auteur : SEMPERE Benjamin L'ensemble des messages est stock dans un objet MessageResources disponible dans le scope request. Une fois cet objet rcupr, on accde un message particulier via la mthode getMessage() avec en paramtres la locale et la cl du message rcuprer. Un extrait de code titre d'exemple : I18NHelper
/** * Return the message resources for localization */ private static MessageResources getMessageResources(HttpServletRequest request) { } return (MessageResources) request.getAttribute(Globals.MESSAGES_KEY);

/** * 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);

if(localizedMessage == null) { } localizedMessage = "N/A";

- 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 grer l'internationalisation (I18N) et/ou la localisation avec Struts ? : Le ResourceBundle

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" />

A partir de la version 1.2, on peut faire directement :


<action path="/BasicAction" forward="/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 >

Comment changer de langue la demande avec Struts ?


Auteurs : hipchic - Lionel Roux (aka RanDomX) Pour changer la langue la demande, il faut crer une action qui va mettre jour la locale dans l'objet request.
- 23 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 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

il faut ensuite utiliser:


<bean:write name='mybean' property='number' formatkey='number.format'/>

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);

log.trace("loadLocale(" + localeKey + ")"); synchronized(locales) { if(locales.get(localeKey) == null) break label0; } return;

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;

static { log = LogFactory.getLog(MultiPropertyMessageResources.class);


- 26 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 faut ensuite crire un Factory pour Struts :


package bla.bla.bla.struts; import org.apache.struts.util.MessageResources; import org.apache.struts.util.PropertyMessageResourcesFactory; public class MultiPropertyMessageResourcesFactory extends PropertyMessageResourcesFactory { public MultiPropertyMessageResourcesFactory() { } public MessageResources createResources(String config) { return new MultiPropertyMessageResources(this, config, returnNull); }

Puis il ne reste plus qu' modifier le struts-config.xml :


<message-resources parameter="fichier1,fichier2,fichier3" factory="bla.bla.bla.struts.MultiPropertyMessageResourcesFactory" />

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 ?

Comment dfinir les fichiers de localisation en dehors du classpath ?


Auteur : Alwin Pour pouvoir utiliser un ResourceBundle dfini en dehors du classpath, il faut dclarer un module de chargement de ressources comme suit : Remarque : cette classe est une version amliore de celle propose pour la question sur le chargement de plusieurs ResourceBundle (cf. lien). Ses fonctionnalits sont les suivantes : Support de fichier de ressources multiples recours aux cls de bundle Accepte les ressources dans le classpath Accepte les ressources de type url
package com.vvic.struts.utils; import java.io.InputStream; import java.net.URL;
- 27 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

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;

static { log = LogFactory.getLog(MultiPropertyMessageResources.class); }

Exemple de configuration dans le fichier struts-config.xml :


<message-resources parameter="resources.application,file:///workspace/globalResources/erreurs" factory="com.vvic.struts.utils.MultiPropertyMessageResourcesFactory" />

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.

Comment factoriser plusieurs actions ralisables sans JavaScript ? : Le LookupDispatchAction


Auteurs : Alwin - c_nvy - Lionel Roux (aka RanDomX) Si le JavaScript n'est pas actif ou pas souhait, le DispatchAction ne peut fonctionner. Heureusement, Struts offre le LookupDispatchAction [org.apache.struts.actions.LookupDispatchAction] qui permet d'outrepasser cette limitation. Le LookupDispatchAction reprend le mcanisme du Comment factoriser plusieurs actions ralisables sur un seul ActionForm ? : Le DispatchAction. Les seules diffrences rsident dans la dclaration du nom du (ou des) bouton(s) de soumission qui doit tre identique (attribut property de la balise submit) la valeur (arbitraire) donne l'attribut parameter dans la dfinition de l'action.
<action path="/cartManagement" type="app.management.CartAction" name="cartForm" scope="request" validate="true" input="/page.jsp" parameter="monAction"/>

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 ?

Comment utiliser l'annulation d'un formulaire lorsque on utilise une LookupDispatchAction ?


Auteur : dje_dje Depuis la version de struts 1.2.0, le LookupDispatchAction propose une action "cancelled" surcharger par les classes filles. Donc dans un formulaire si vous avez plusieurs html:submit et un html:cancel vous n'avez plus vous soucier la manire de rcuprer l'appel dans l'action. Il suffit juste d'implmenter la mthode "cancelled" et de rajouter la proprit cancellable pour l'action dans le fichier struts-config.xml (une scurit pour explicitement dclarer que cette action est annulable) :
<action ...> <set-property property="cancellable" value="true"/> </action>

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

D'o provient l'erreur Javascript 'document.forms[0].submit is not a function' ?


Auteur : c_nvy Quand on utilise du Javascript dans une page jsp, il faut viter de donner aux proprits du formulaire des noms qui correspondent des attributs des tags comme par exemple submit et action. Exemple : Une proprit appele submit
<html:submit property="submit" value="Valider">

Une tentative de soumission


<html:select property="itemSelected" onchange="document.forms[0].submit();">

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 ?

Comment valider ses donnes avec la mthode validate() de l'ActionForm ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 Il faut redfinir la mthode validate(ActionMapping mapping,HttpServletRequest request) de l'ActionForm et y implmenter les validations. Cette mthode est appelle systmatiquement aprs le remplissage de l'ActionForm. Si aucune erreur n'est constate, la mthode retourne null ou une instance de ActionErrors de taille 0. Si une erreur est constate, une instance de ActionErrors contenant une ou plusieurs instances de ActionMessage (ActionError pour d'anciennes versions de Struts) est retourne. Les messages d'erreurs sont alors affichs grce la balise <html:errors/> lien : Comment valider ses donnes avec le plug-in Validator de Struts ?

Comment valider ses donnes avec le plug-in Validator de Struts ?


Auteurs : c_nvy - Lionel Roux (aka RanDomX) Pour utiliser le validator, il faut : que le plug-in validator soit install et configur. que l'ActionForm hrite de ValidatorForm. Cette classe ne ncessite pas d'implmentation des mthodes reset( ) et validate( ). qu'une rgle de validation soit dfinie dans le fichier xml de validation pour l'ActionForm. que l'attribut validate soit positionn la valeur true dans le mapping de l'action correspondante.

Exemple de rgle de validation:


<form-validation> <formset> <form name="logonForm"> <field property="username" depends="required"> <msg name="required" key="error.username"/>
- 33 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

</field> </form> </formset> </form-validation>

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 : Comment valider ses donnes avec la mthode validate() de l'ActionForm ?

Comment combiner la validation du Validator et la mthode validate() d'un formulaire ?


Auteur : c_nvy Si on souhaite fournir une validation complmentaire dans un ValidatorForm qui exploite le plugin Validator, il suffit de redfinir la mthode validate comme suit :
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // ici on rcupre tous les messages d'erreurs grs par le Validator ActionErrors errors = super.validate(mapping, request); if ( ... ) { errors.add("idErreur",new ActionMessage ("cle.erreur")); } return errors; }

lien :

Comment valider les donnes d'un formulaire avec Struts ?

- 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 :

Comment valider ses donnes avec le plug-in Validator de Struts ?

Comment dfinir moi mme le nom de la fonction de validation javascript ?


Auteur : Ricky81 Par dfaut, l'utilisation de la balise <html:javascript > de gnration de la fonction javascript de validation d'un formulaire gnre une fonction dont le nom est li au nom du formulaire. Par exemple, <html:javascript name="monForm" /> donnera une fonction validateMonForm. Il peut tre souhait, pour une raison ou une autre (flexibilit en cas de changement de nom du formulaire, normalisation, ...) de pouvoir dfinir soi mme le nom de la fonction gnre. L'attribut method permet cela.
<html:javascript formName="monForm" method="strutsValidation" /> ... <html:form action="/monAction" onsubmit="return strutsValidation(this);"> ... </html:form>

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 :

Comment valider ses donnes avec le plug-in Validator de Struts ?

Comment grer la validation d'un formulaire dans l'Action ?


Auteur : c_nvy Il arrive que dans certains cas il soit plus appropri de procder la validation d'un formulaire au niveau d'une classe de type Action. En effet, dans le cas de classes comme DispatchAction, LookupDispatchAction ou MappingDispatchAction, la dclaration de validation (struts-config) va s'appliquer toutes les mthodes, ce qui ne sera pas toujours satisfaisant. L'appel de la validation (pouvant inclure l'utilisation du plugin validator) dans une Action ncessite de travailler avec la classe ActionMessages. Il est galement possible de construire soit-mme ses messages (notamment dans le cas d'une vrification ncessitant un appel mtier) et de l'ajouter l'ensemble des messages.

- 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 :

Comment valider les donnes d'un formulaire avec Struts ?

- 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>

Dans l'action, on rcupre la valeur en faisant :


String somepropValue = null; if((somepropValue = request.getParameter("someprop"))!=null) { // ckecked System.out.println("The box is checked and its value is " + somepropValue); } else { // not ckecked System.out.println("The box is not checked"); // set the value someprop = "false"; }

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; }

Comment configurer un ensemble de boutons radio partir d'une collection d'objets ?


Auteur : c_nvy Tout d'abord, il s'agit d'itrer sur la collection d'objets en dclarant la variable de boucle identifiant l'lment courant (cf. id). Pour chaque lment, le composant radio cr doit rfrencer (cf. idName) l'lment exploiter par l'intermdiaire du nom de la variable dfinie prcdemment.

- 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>

S'il s'agit d'une collection d'objets ayant pour proprits id et libelle :


<html:select property="selectedItem"> <html:options collection="uneCollection" property="id" labelProperty="libelle"/> </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 d'objets ayant pour proprits id et libelle :


<html:select property="selectedItem"> <html:optionsCollection property="uneCollection" value="id" label="libelle"/> </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

... </html:select> </html:form>

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); ...

Le code de la vue suivant affichera ainsi la slection correspondante :


<html:select property="valeurSelectionnee"> <html:optionsCollection property="listeValeur" label="label" value="value" /> </html:select>

- 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; } ...

Il faut crer aussi dans l'Action idoine "UploadAction" contenant :


{

... UploadActionForm theForm = (UploadActionForm) actionForm; FormFile file = theForm.getFichier(); ...

Voila, vous avez votre objet implmentant FormFile [org.apache.struts.upload] , que vous pouvez manipuler sur le serveur.

Comment envoyer au client un fichier avec Struts ?


Auteur : Lionel Roux (aka RanDomX) Dans l'action il faut rcuprer le nom du fichier envoyer (filename). Ensuite il faut ouvrir le stream de l'objet response et y envoyer le flux de donnes correspondant au fichier comme ceci:
File f = ...; String filename = f.getName(); response.setContentType("multipart/zip"); response.setHeader("Content-Disposition", "attachment; filename=\"" +
- 42 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

filename + "\";"); response.setContentLength((int)f.length()); try {

} catch (Exception ex) { ex.printStackTrace(); } .. return mapping.findforward("fichieenvoye");

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".

Comment ouvrir un fichier dans le navigateur avec Struts?


Auteur : Lionel Roux (aka RanDomX) Prenons l'exemple d'un fichier PDF. Dans la page (par exemple) on a :
<html:link page="/openpdf.do" name="pdfForm" property="pdfName" target="_blank"> <html:img src="./images/PDF.gif" border="0" alt="View PDF"/> </html:link>

Dans la mthode execute de l'Action :


ByteArrayOutputStream bos = new ByteArrayOutputStream(5000); // Remplir ici votre bos avec le flux du PDF httpServletResponse.setContentType("application/pdf"); httpServletResponse.setContentLength(bos.size()); OutputStream os = httpServletResponse.getOutputStream(); os.write(bos.toByteArray(), 0, bos.size()); os.flush(); os.close(); return null;

- 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

Le fichier PDF s'ouvre alors dans le navigateur.

- 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}'" />

Comment enrichir une URL avec la proprit d'un ActionForm Struts ?


Auteur : Lionel Roux (aka RanDomX) Si la (ou les valeurs) passer se trouve dans un bean connu, on peut utiliser les attributs paramId et paramName.paramId correspond au nom du paramtre passer, et paramName au nom du bean qui contient la valeur.
<html:link href=action.do paramId="prop" paramName="myBean"/>

Si ce bean ne contient pas que la dite proprit, on utilise l'attribut paramProperty :


<html:link href="action.do" paramId="myProperty" paramName="myBean" paramProperty="myProperty"/>

Comment enrichir une URL avec une valeur connue ?


Auteur : Lionel Roux (aka RanDomX) Si la valeur est statique ou connue, il suffit d'enrichir l'url la main :
<html:link href="action.do?prop=thepropvalue" />

Comment enrichir une URL avec les proprits d'un ActionForm ?


Auteur : Lionel Roux (aka RanDomX) Dans certains cas, il peut tre intressant de soumettre des valeurs par le biais d'un lien. Si l'on souhaite passer plusieurs paramtres, on peut utiliser l'attribut paramName seul dans le tag <html:link>. Le bean rfrenc doit contenir une Map contenant les couples cles/valeurs pour chaque paramtre. Une limitation existe cependant, les noms des cls sont les noms des paramtres qui seront transmis. lien : Comment enrichir une URL avec la valeur d'une proprit d'un bean local? lien : Comment enrichir une URL avec la proprit d'un ActionForm Struts ?

- 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

lien : Comment enrichir une URL avec une valeur connue ?

Comment utiliser le LookupDispatchAction avec un lien dans la jsp ?


Auteurs : c_nvy - Ricky81 Prenons l'exemple suivant : Dans les struts-config :
<action path="/tonAction" parameter="action"...>

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

Une premire solution serait d'crire le code suivant dans la JSP :


<html:link action="tonAction?action=Ajouter"> <bean:message key="bouton.ajouter"/> </html:link>

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

Sommaire > Erreurs Comment afficher un message d'erreur avec Struts ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 Pour insrer un message d'erreur sur vos pages, il suffit de positionner le tag <html:errors/>. Ensuite pour alimenter ce tag, vous devez crer un ActionMessage en lui passant en paramtre soit la cl du message d'erreur contenu dans un bundle, soit le message directement.
ActionMessage am = new ActionMessage("foo.bar.myKey");

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.

Comment afficher un message d'erreur simple et totalement dynamique ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 Pour un message simple et dynamique, on cre l'ActionMessage de la manire suivante : Dans le ResourceBundle on a une cl comme ceci:
error.dynamic={0}

Dans l'ActionForm, on remplit l'ActionMessage:


.. ..new ActionMessage("error.dynamic", "This_is_my_message"); ..

Le rsultat sera le suivant:


This_is_my_message.

- 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.

Comment afficher un message d'erreur simple rfrenc dans le ResourceBundle ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 Pour un message simple dont le texte est contenu dans le ResourceBundle, on cre l'ActionMessage de la manire suivante : Dans le resource bundle, on a une cl comme ceci:
error.myerror.foo.bar=This is my message from bundle

Dans l'ActionForm, on remplit l'ActionMessage:


.. new ActionMessage("error.myerror.foo.bar"); ..

Le rsultat sera le suivant:


This is my message from bundle.

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 ?

Comment afficher un message d'erreur personnalis rfrenc dans le ResourceBundle ?


Auteurs : Lionel Roux (aka RanDomX) - Ricky81 Pour un message personnalisable dont le texte est contenu dans le ResourceBundle, on cre l'ActionMessage de la manire suivante : Dans le ResourceBundle, on a une cl comme ceci:
error.myerror.foo.bar.custom=This is my {0} message from bundle

Dans l'ActionForm, on remplit l'ActionMessage:


.. .. am1 = new ActionMessage("error.myerror.foo.bar.custom", "custom"); .. am2 = new ActionMessage("error.myerror.foo.bar.custom", "own"); ..

Le rsultat sera le suivant:


This is my custom message from bundle. This is my own message from bundle.

De la mme manire, on peut imaginer toutes sortes de compositions :


- 48 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

error.myerror.foo.bar.custom.comp=This is my {0} message from bundle: {1}

avec la construction suivante :


.. new ActionMessage("error.myerror.foo.bar.custom.comp", "custom", "hello you"); ..

pour l'affichage suivant :


This is my custom message from bundle: hello you

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.

Comment savoir dans la JSP s'il y a des messages d'erreurs ?


Auteur : mattheox Il existe au moins 3 solutions pour savoir si la balise <html:errors/> est susceptible d'afficher des messages d'erreur. 1) Utilisation de taglib logic:present et de la constante Globals.ERROR_KEY
<logic:present name="<%=org.apache.struts.Globals.ERROR_KEY%>"> faire quelque chose de spcifique en cas d erreur </logic:present>

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

Sommaire > Messages Comment afficher un message en retour d'une action ?


Auteur : c_nvy En cas d'erreur technique ou mtier, ou mme pour signifier le bon droulement d'un traitement, il est possible de dclarer un message dans l'Action et de l'enregistrer dans le scope request ou session pour pouvoir l'afficher dans une jsp. Pour ce faire, il suffit d'utiliser les classes ActionMessage et ActionMessages : Dclaration de l'ActionMessage dans l'Action
ActionMessages messages = new ActionMessages(); messages.add("message1", new ActionMessage("error.message")); this.saveMessages(request, messages);

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 :

Comment afficher un message d'erreur simple rfrenc dans le ResourceBundle ?

- 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

Sommaire > DataSource Comment utiliser un DataSource directement avec Struts ?


Auteur : Lionel Roux (aka RanDomX) Pour utiliser un datasource dclar dans le fichier struts-config.xml, par exemple dans une Action, vous devez faire comme ceci:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception

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 :

Comment configurer un datasource utilisable directement par Struts ?

Comment utiliser plusieurs DataSources avec Struts?


Auteur : Lionel Roux (aka RanDomX) Vous pouvez accder vos DataSources de la manire suivante, en les rfrencant :
... try { dataSourceA = getDataSource(request, "FirstDataSource"); ... dataSourceB = getDataSource(request, "SecondDataSource"); ... } ...

lien :

Comment configurer plusieurs datasources utilisables par Struts ?

- 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>

Dans le fichier struts-config.xml :


<action path="/myAction" type="..."> ... </action> <action path="/restricted/myProtectedAction" type="..."> ... </action>

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.

Comment afficher certains lments en fonction du rle de l'utilisateur ?


Auteur : Lionel Roux (aka RanDomX) Il faut utiliser la taglib logic et mettre le bloc cacher entre <logic:present> en spcifiant le rle autoris dans l'attribut role :
<logic:present role="admin"> This is hide to non admin user </logic:present>

- 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

Sommaire > Plug-ins Qu'est ce qu'un plug-in dans Struts ?


Auteur : Lionel Roux (aka RanDomX) Les plug-ins permettent globalement Struts de dcouvrir dynamiquement des ressources et/ou des services au dmarrage de l'application. Ils permettent surtout de ne pas avoir redfinir la servlet ActionServlet pour simplement initialiser un service au dmarrage de l'application. Les plug-ins les plus connus sont Tiles, un framework de composition de page trs puissant, et le Comment valider ses donnes avec le plug-in Validator de Struts ? qui permet de valider dclarativement ses donnes cot client et serveur. Vous pouvez aussi Comment crer son propre plug-in pour Struts ? pour adresser toutes vos problmatiques qui ne seraient pas prise en compte par Struts. Techniquement, un plug-in reoit une notification du dmarrage et de l'extinction de l'application. Au dmarrage, le framework cre une instance de chaque classe de plug-in dclar. La mthode init() est alors appele. A l'extinction, la mthode destroy() est appele.

Comment installer un plug-in pour Struts ?


Auteur : Lionel Roux (aka RanDomX) Pour installer un plug-in dans Struts, il suffit de le dclarer dans l'lment <plug-in> du fichier de configuration struts-config.xml. L'lment <plug-in> spcifie un nom compltement qualifi de la classe d'implmentation du plug-in. Comme le spcifie la DTD du fichier struts-config.xml, l'lment <plug-in> peut contenir 0 ou plus lments <set-property>.
<!ELEMENT plug-in (set-property*)>

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>

Comment crer son propre plug-in pour Struts ?


Auteur : Lionel Roux (aka RanDomX) Pour dfinir votre propre plug-in, vous devez fournir une classe d'implmentation non abstraite qui implmente l'interface PlugIn [org.apache. struts.action.PlugIn] et la Comment installer un plug-in pour Struts ? dans le fichier de configuration struts-config.xml. Vous devez redfinir les mthodes init() et destroy() et y insrer le code d'initialisation et de destruction de votre service.

- 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" />

Dans la JSP majsp.jsp :


... <logic:forward name="monaction"/> ...

Dans le fichier web.xml :


<welcome-files> <welcome-file>majsp.jsp</welcome-file> <welcome-file>...</welcome-file> </welcome-files>

L'ouverture de l'application web monapplication retourne le rsultat de l'Action mappe par monaction.

Comment faire un "redirect" vers une ressource avec Struts ?


Auteur : Lionel Roux (aka RanDomX) En gnral, aprs avoir invoqu une Action, vous souhaitez tres redirig vers l'un des mappings dfini dans votre fichier de configuration struts-config.xml.
<action path="/monAction" type="struts.action.MonAction" name="monActionForm" scope="session" input="/ma.jsp" validate="true"> <forward name="jsp" path="/jsp.jsp"/> <forward name="..." .../> </action>

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>

Comment automatiser la population des chanes contenant des dates ?


Auteur : Alwin Les Commons BeanUtils ne prennent pas en charge de base la population d'un lment de type java.util.Date partir d'une chane de caractres. Ainsi, si vous utilisez tel quel un attribut de type Date dans votre formulaire, vous rencontrerez l'erreur suivante :
javax.servlet.ServletException: BeanUtils.populate

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); } }

Il ne reste plus qu' ajouter ce plug-in au struts-config.xml avec la ligne suivante :


<plug-in className="bla.bla.bla.struts.plugin.StrutsBootstrapPlugin" />

- 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.

Comment crire soi-mme le flux de rponse ?


Auteur : mattheox Il arrive de devoir crire un flux de rponse directement sans renvoyer vers une vue de type JSP (XML, fichier Word, Excel, XML, etc.). Voici comment raliser ceci. Dans le struts-config.xml, crer une action sans forward :
<action name="DocumentForm" path="/documentAction" scope="request" type="actions.DocumentAction" validate="false"/>

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;

Voici une implmentation possible pour envoyer un flux/fichier Excel :


public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Typer la rponse response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"fichier.xls\""); // Calculer le flux renvoyer au client FileInputStream is = new FileInputStream("fichier.xls"); byte buffer[] = new byte[1024]; int nbLecture; // Envoyer le flux dans la rponse OutputStream os = response.getOutputStream(); while ((nbLecture = is.read(buffer)) != -1) { os.write(buffer, 0, nbLecture); } 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/

Vous aimerez peut-être aussi