Je fais (merci à certains utilisateurs sur ce portail) mon application qui implémente SessionAware.Struts2 - Problèmes de session
Ceci est mon code actuel:
public class UserManager extends ActionSupport implements SessionAware {
private Map<String, Object> session;
@Override
public String execute() throws Exception {
return SUCCESS;
}
public void setSession(Map<String, Object> map) {
this.session=map;
}
public String checkLogin() {
session.put("loggedOn", true);
return SUCCESS;
}
public String checkLogout() {
session.clear();
return SUCCESS;
}
}
Et je vérifier ces variables sur mon .jsp:
<s:if test="#session['loggedOn']!=true">
DIV LOGIN
</s:if>
<s:else>
DIV LOGOUT
</s:else>
Une pièce facile de code.
Ce que je voudrais savoir est ceci:
1 - le haricot est (par défaut) demande scope. Ainsi, lorsque la demande est terminée, elle sera détruite. Mais je vois ça, quand je mets une variable dans la carte, elle est toujours vivante sur le serveur. Comment est-ce possible? Est une variable de mon Bean.
2 - Qui appelle la méthode setSession? Je pense que le servlet, en raison du fait que j'implémente cette interface?
3 - Je voudrais me détacher de la sauvegarde d'objet/bean sur un objet Session. Je voudrais utiliser la session Bean portée (comme pour tout type de framework MVC). Comment puis-je le faire sur struts2?
Espoir vous pouvez faire clairement à ces questions :) Vive
1 & 2 - Ok est maintenant plus clair. La référence de session-map est définie sur l'action Bean trought 'public void setSession (Carte carte) {this.session = map; } '. Mais l'OMS appelle cette méthode? Quand je fais une action (j'appelle ce Bean) je vois que cette fonction est appelée ... Comment est-ce possible? Est-ce le servlet? –
markzzz
Non c'est un intercepteur qui le fait! Dans votre fichier struts.xml, vous verrez que votre déclaration de paquet a 'extends = "struts-default"' alors qu'est-ce que cela signifie? Eh bien, comment votre action obtient-elle les valeurs des formes définies? Comment votre session est-elle automatiquement appelée? Comment les valeurs vont-elles de votre action à votre JSP? ... tout est fait par Interceptors ... Vous devez regarder quelque chose d'important: Ouvrez le Struts2-core-xxxjar (où xxx est la version actuelle) et regardez dans le paquet par défaut, ouvrez struts-default.xml, vous trouverez 'package name = "struts-default"', – Quaternion
vous trouverez 'interceptor-stack name = "defaultStack"' qui est une liste d'intercepteurs qu'ils sont tous invoqués l'un après l'autre jusqu'à ce que votre action soit atteinte et qu'ils reviennent tous la pile jusqu'à ce que la demande soit servie. Vous ne pouvez pas choisir d'autres piles mais vous verrez tout en bas 'default-interceptor-ref name = "defaultStack"' c'est pourquoi cette pile de ce paquet est utilisée =) Maintenant la liste des piles les intercepteurs par nom mais plus vous verrez tous les intercepteurs définis et la classe qu'ils utilisent (dans le pot de xwork) donc vous devriez rapidement parcourir ceci et regarder – Quaternion