6
votes

À l'écoute lorsque la session utilisateur est terminée dans un haricot géré JSF

est-il possible de faire quelque chose comme ceci: lorsqu'une session d'utilisateur commence, je lis un certain attribut intégré de la base de données. Comme l'utilisateur effectue certaines activités de cette session, je mettez à jour cette variable (stockée en session) et lorsque la session se termine, puis je stocke enfin cette valeur à la DB.

Ma question est de savoir comment puis-je identifier à l'aide du cadre JSF si la session d'utilisateur est terminée et que je devrais enregistrer la valeur à la DB?


0 commentaires

3 Réponses :


5
votes

Ma question est comment puis-je identifier en utilisant le cadre JSF si la session d'utilisateur a fini et je devrais alors stocker le Valeur retour à DB?

Le cadre JSF n'a pas de concept distinct d'une session; Il utilise les fonctionnalités de gestion de la session sous-jacente de la spécification de servlet.

Vous devriez créer un httpsPessierListener Cela fournit des crochets pour vous permettre de capturer les événements de création de session et de destruction, où vous pouvez lire la valeur et le stocker dans la DB.


0 commentaires

10
votes

En dehors du httpsSessionListener , vous pouvez utiliser une session de haricot géant de la session pour cela. Vous utilisez @postConstruct (ou juste le constructeur de la haricot) et @predestroy annotations à accrocher à la création de session et détruire xxx

La seule exigence est que ce haricot est référencé dans une page JSF ou comme @managedProperty de Toute demande SPOPED BEAN. Sinon, cela ne sera pas créé. Mais dans votre cas, cela ne devrait pas être un problème car vous utilisez apparemment déjà une session de haricot géré de session, il suffit d'ajouter un @predestroy la méthode devrait être suffisante.


2 commentaires

J'essaie cette deuxième approche comme ça a l'air bien. De plus, je dois pouvoir obtenir une poignée sur les EJBS et le gestionnaire d'entité qui ne semble être disponible que sur des haricots gérés dans JSF (par opposition au HTTPSIVERLISTENER). Je fais les sessionsCoped greanbeanbeanbean a géréProperty de ma connexion à la connexion de ma connexion à la bande de connexion, de sorte qu'elle entre dans la portée lorsque l'utilisateur se connecte. Le problème que je vais avoir, c'est qu'il semble que la méthode que j'ai marquée @Predestroy est appelée que le haricot de connexion est désactivé. portée (c'est-à-dire lorsque la méthode de connexion renvoie). Donc, mon code est en train de tirer tôt. Des idées sur la raison pour laquelle cela pourrait arriver?


mkyong.com/servlet/...



2
votes

httpsandlistener ou si vous avez besoin d'une injection de dépendance pour cette sauvegarde, vous pouvez utiliser @postConstruct et @predestroy . N'oubliez pas que la session est détruite lorsque vous appelez invalider () ou après l'heure de la session, pas lorsque l'utilisateur ferme le navigateur. Pourquoi utilisez-vous de toute façon la portée de la session, la portée de conversation pourrait mieux vous adapter.


0 commentaires