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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Recupérer toutes les HttpSession dans un applicationScoped bean [JSF 2.X]


Sujet :

JSF Java

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut Recupérer toutes les HttpSession dans un applicationScoped bean
    Bonjour,
    J'utilise des variable de Session HttpSession pour sauvegarder des connexions utilisateurs. Est-il possible de toutes les récupérer au sein d'un bean en applicationScoped ? (afin de pouvoir récupérer les utilisateurs connectés). Merci.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Dans le principe oui, est-ce que c'est une bonne idée, je ne sais pas...

    Tu pourrais t'en sortir en utilisant une classe implémentant HttpSessionListener.
    Là tu as à disposition 2 méthodes :

    • sessionCreated(HttpSessionEvent)
    • sessionDestroyed(HttpSessionEvent)


    Tu peux donc ajouter ou supprimer les identifiants de session (ou l'objet session) dans le contexte application.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Dans le principe oui, est-ce que c'est une bonne idée, je ne sais pas...

    Tu pourrais t'en sortir en utilisant une classe implémentant HttpSessionListener.
    Là tu as à disposition 2 méthodes :

    • sessionCreated(HttpSessionEvent)
    • sessionDestroyed(HttpSessionEvent)


    Tu peux donc ajouter ou supprimer les identifiants de session (ou l'objet session) dans le contexte application.
    J'ai créé ce listener, mais apparemment les sessions persistent c pas vraiment du temps réel, merci de m'avoir mis sur la voie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    package listeners;
     
    import beans.ApplicationBean;
    import classes.Data;
    import java.util.ArrayList;
    import java.util.List;
    import javax.faces.context.FacesContext;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import mapping.MappedUsers;
     
    /**
     *
     * @author pj
     */
    public class SessionListener implements HttpSessionAttributeListener {
     
        private final List<MappedUsers> mappedUsers;
     
        public SessionListener() {
            mappedUsers = new ArrayList<>();
        }
     
        public FacesContext getFacesContext() {
            return FacesContext.getCurrentInstance();
        }
     
        @Override
        public void attributeAdded(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getSession().getAttribute(Data.USERSESSION);
                boolean flag = false;
                for (MappedUsers mu2 : mappedUsers) {
                    if (mu2.getId() == (long) mu.getId()) {
                        flag = true;
                        break;
                    }
                }
                if (!flag) {
                    mappedUsers.add(mu);
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.setMappedUsers(mappedUsers);
                }
            }
        }
     
        @Override
        public void attributeRemoved(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getSession().getAttribute(Data.USERSESSION);
                boolean flag = false;
                int i = 0;
                for (MappedUsers mu2 : mappedUsers) {
                    if (mu2.getId() == (long) mu.getId()) {
                        flag = true;
                        break;
                    }
                    i++;
                }
                if (flag) {
                    mappedUsers.remove(i);
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.setMappedUsers(mappedUsers);
                }
            }
        }
     
        @Override
        public void attributeReplaced(HttpSessionBindingEvent event
        ) {
        }
     
    }

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Soit je n'ai pas compris ton besoin soit tu t'es trompé.

    Le HttpSessionAttributeListener est intéressant quand tu veux suivre les ajouts/suppression d'un attribut dans une session, rien à voir avec la création/suppression d'une session.
    Pour suivre la session, il faut utiliser le HttpSessionListener.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Soit je n'ai pas compris ton besoin soit tu t'es trompé.

    Le HttpSessionAttributeListener est intéressant quand tu veux suivre les ajouts/suppression d'un attribut dans une session, rien à voir avec la création/suppression d'une session.
    Pour suivre la session, il faut utiliser le HttpSessionListener.
    Le problème c'esst que j'utilise différente session et lors de la methode sessionCreated je ne sais pas comment tester si il s'agit bien de la session utilisateur

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pour déterminer par exemple à quel utilisateur appartient une session, tu peux toujours tester un attribut de la session qui identifierait ton utilisateur.
    L'event contenant l'objet Session, cet objet étant stocké dans un scope Application, ton process peux très bien faire un session.getAttribute("unNom").

    Bien sûr, ça suppose que tu ais prévu de mettre un tel objet en session
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 014
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Comme je n'ai pas réussi à récupérer les sessions dans HttpSessionListener j'ai trouvé une autre méthode : mes sessions sont des Objets MappedUsers donc j'ai implémenté la classe avec HttpSessionBindingListener puis ajouté ces 2 méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
       @Override
        public void valueBound(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getValue();
                if (mu != null) {
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.addUser(mu);
     
                }
            }
        }
     
        @Override
        public void valueUnbound(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getValue();
                if (mu != null) {
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.removeUser(mu);
                }
            }
        }
    et dans applicationBean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     public void addUser(MappedUsers mu) {
            boolean f = true;
            long id = mu.getId();
            for (MappedUsers mu2 : mappedUsers) {
                if (mu2.getId() == id) {
                    f = false;
                    break;
                }
            }
            if (f) {
                mappedUsers.add(mu);
            }
        }
     
        public void removeUser(MappedUsers mu) {
            boolean f = false;
            int i = 0;
            long id = mu.getId();
            for (MappedUsers mu2 : mappedUsers) {
                if (mu2.getId() == id) {
                    f = true;
                    break;
                }
                i++;
            }
            if (f) {
                mappedUsers.remove(i);
            }
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recupérer toutes les instance d'un bean scope proto
    Par jamesleouf dans le forum Spring
    Réponses: 0
    Dernier message: 18/02/2009, 17h00
  2. [C#] Recupérer toutes les fenêtres
    Par 0xYg3n3 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 20/09/2006, 13h32
  3. Retrouver toutes les occurences dans un memo
    Par johweb dans le forum Delphi
    Réponses: 2
    Dernier message: 09/06/2006, 14h44
  4. [Tableaux] Recuper toutes les options dans select
    Par Tempotpo dans le forum Langage
    Réponses: 6
    Dernier message: 13/04/2006, 14h26
  5. Réponses: 2
    Dernier message: 17/06/2005, 23h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo