FAQ StrutsConsultez toutes les FAQ
Nombre d'auteurs : 25, nombre de questions : 96, dernière mise à jour : 23 février 2015 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience 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 prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
- 5.1. Les ActionForms (2)
- 5.2. Les Exceptions (3)
- 5.3. Les Datasources (3)
- 5.4. Divers (3)
Struts ne fournit pas de mécanisme pour réaliser cela.
Cependant ceci peut être fait simplement avec l'une des techniques suivantes :
- avec un conteneur compatible avec les spécifications Servlet 2.3, vous pouvez implémenter un filtre de prétraitement ;
- avec une application compatible Struts 1.1 et plus, vous pouvez redéfinir le RequestProcessor et y intégrer les prétraitements ;
- avec une application compatible Struts 1.0, vous pouvez redéfinir l'ActionServlet et y intégrer les prétraitements.
Une manière de faire est d'étendre la classe org.apache.struts.action.RequestProcessor qui réalise un certain nombre de traitements en amont de l'exécution du code d'une action.
Cette solution est d'autant plus intéressante si vous utilisez des actions variées dans votre application (Action, DispatchAction...).
Pour que Struts prenne en compte la nouvelle classe, modifier le struts-config.xml :
Code xml : | Sélectionner tout |
1 2 3 | <controller> <set-property property="processorClass"value="com.developpez.faq.struts.FaqRequestProcessor"/> </controller> |
Dans notre nouvelle classe, il nous faudra écrire le code suivant :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | // On vérifie si l'utilisateur 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 vérifie si la session a expiré : 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; } 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; } |
Il vous suffit de créer une classe héritant de ActionMapping, et y ajouter les paramètres voulus. Ici par exemple le paramètre level est déclaré :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 déclarez en ajoutant le paramètre className :
Code xml : | Sélectionner tout |
1 2 3 4 5 | <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'implémentation de l'action, ici fr.appli.actions.TitreSecondaireInit, il ne vous reste plus qu'à récupérer le paramètre level comme ceci :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package fr.appli.actions; // 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(); // ... } } |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même 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 intérêts.