Comment est-il possible de détruire complètement un bean session pour un instancier un nouveau?
J'aimerais en fait utiliser cela à la déconnexion des membres de mon application et les ramener à la page de login.
Comment est-il possible de détruire complètement un bean session pour un instancier un nouveau?
J'aimerais en fait utiliser cela à la déconnexion des membres de mon application et les ramener à la page de login.
Hum... j'ai regardé rapidement, ça me semble bien compliqué à intégrer sur mon appli existante (je n'ai jamais utilisé Spring)... Y'a pas moyen de faire plus simple avec une méthode purement JSF?
hm c est pourtant le plus pratique pour la gestion des users et autres
désolé je ne connais pas de méthodes pour destroyé un bean
Pourquoi ne pas te contenter de vider ce session bean ? ou bien d'yajouter une variable boolean 'estConnecte' ?
Tu ne devrais pas gérer la destruction des session bean, ton serveur d'application est là pour ça.
J'ai justement déjà un attribut estConnecte que je passe à false à la deconnexion... Mais si quelqu'un derrière se connecte avec un autre login, il se retrouve avec tous les autres attributs de l'ancienne 'session'!
Je vais faire ça, vider 'à la main' mon session bean.
Donc si j'ai bien compris, tu as un unique session bean qui gère toutes tes connexions utilisateurs.
Dans ce cas tu dois associer le booléen estConnecte à chaque utilisateur.
Chaque fois qu'un utilisateur se connecte, il ajouté à une liste d'utilisateur dans ton SB et ta classe utilisateur a un attribut estConnecte. C'est un exemple.
Hi,
Supposons que tu as une bean du genre
Pour le supprimer (passe une valeur null ) de la session ou le ressetter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <managed-bean> <managed-bean-name>eventCtrl</managed-bean-name> <managed-bean-class>...</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public static void setEventCtrlInSession(EventController evtCtrl) { if (evtCtrl != null) { getSessionMap().put("eventCtrl", evtCtrl); } else { getSessionMap().remove("eventCtrl"); } }
Je ne suis pas sur de tout avoir compris mais si ton problème se limite à réinstancier un managed-bean, procède de la sorte:
Supposons que ton managed-bean se nomme "monBean" et que la classe associé est "MonBean":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding vb = app.createValueBinding("#{monBean}"); vb.setValue(getFacesContext(), new MonBean());
peut être que les liens suivants pourront t'aider :
http://www.jsffaq.com/Wiki.jsp?ptitl...nateTheSession
http://www.jsffaq.com/Wiki.jsp?ptitl...ssionScopeBean
http://jsf-faq.com/faqs/faces-misc.html#136
Bon j'avais le même problème que toi mais la réponse de SEMPERE Benjamin est bonne.
Mais j'ai une deuxième question concernant les beans en session.
En utilisant la méthode de SEMPERE Benjamin, je crée un nouveau bean de type "MonBean" est ce que peut-on avoir plusieurs objet en session du même type?
Comme nous avons crée un nouveau bean de type MonBean et qu'il en existait déjà un, j’ai vu qu'il a donc écrasé l'ancien. Je pense donc qu'on ne peut pas avoir plusieurs bean en session d'un même type.
Êtes-vous d'accord?
Si c'est juste pour de la deconnexion avec effacement des bean en session pourquoi pas tout simplement http://java.developpez.com/faq/jsf/?...#ASTUCE_logout
Oui c'est vrai cette methode peux marcher je vais la tester, mais est ce quelqu'un peut repondre a ma question :
Peut on avoir plus bean en session d'un meme type???
Oui, la différenciation se fait par nom (que tu choisis) et non pas par type.
Le fait de pouvoir avoir plusieurs beans instanciés m'intéresse également , mais que veux tu dire par différenciation par nom ??
Merci
Je veux dire qu'on peut avoir 75478632421 instances du même type dans la session, du moment qu'ils ont des noms différents.
Une session peut être assimilé à un Map<String, Object>, où un objet quelconque peut être stocké sous un nom donnée.
Pareil pour les managed beans de JSF : tu peux créer plusieurs instances du même type de managed bean si tu spécifies des noms différents.
Oui, je crois que je comprends, les managed beans peuvent etre instanciés comme des classes java normales ?
mais lorsque tu dis :
ce que j'aimerais savoir, c'est à quel niveau le nom d'un managed bean est défini ... dans faces-config ?Pareil pour les managed beans de JSF : tu peux créer plusieurs instances du même type de managed bean si tu spécifies des noms différents
Tout à fait dans le face-config un petit exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6<managed-bean> <managed-bean-name>NOM DU BEAN</managed-bean-name> <managed-bean-class>package.MaClasse</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
OOk .. aussi simplement ? ^^
En fait, je posais cette question car je souhaite faire qqchose dans un projet mais du coup je ne sais pas si cela est possible. Je m'explique :
J'ai un bean Compétence, relié à une table d'une base de données, et à un moment, je souhaite que l'utilisateur puisse en créer autant qu'il le désire, mais j'aurais besoin de garder tous les beans de ces compétences crées instanciés, car ensuite je vais les utiliser ..
Mais la déclaration dans le faces config , que permet elle ?
Partager