IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

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.

SommaireConfiguration de l'application Struts (14)
précédent sommaire suivant
 

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.

Mis à jour le 18 mai 2004 RanDomX

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

Mis à jour le 28 juin 2006 Sniper37

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();  
    // ...  
  }  
}

Mis à jour le 4 juin 2008 blbird

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


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2022 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.