2010-05-04 7 views

Répondre

1

Je ne fais pas du printemps, mais dans JSF normal/JSP/Servlet vous saisirait HttpSessionBindingListener pour cela. Fondamentalement, vous devez attribuer une propriété static List<Bean> au bean tronqué de la session et implémenter l'interface en conséquence afin de mettre à jour la liste static dans les méthodes valueBound() et valueUnbound().

Vous trouverez un exemple de code détaillé dans this answer.

0

Voici une solution je suis venu avec qui utilise Spring:

Je fais un haricot normale printemps singleton appelé SessionBeanHolder. Ce bean contient une liste de mes beans de session. Lorsqu'un utilisateur se connecte, j'ajoute le bean session à mon SessionBeanHolder.

Lorsque vous faites référence à des beans de session dans Spring, vous faites réellement référence à des proxies. Donc la clé de ce travail était de récupérer le bean sous-jacent à ajouter au SessionBeanHolder.

est Ci-dessous l'exemple de code:

Note: Ma bean session est appelée SessionInfo.

@Scope(value="singleton") 
@Component 
public class SessionBeanHolder { 

    static Set<SessionInfo> beans; 

    public SessionBeanHolder() { 
     beans = new HashSet<SessionInfo>(); 
    } 

    public Collection<SessionInfo> getBeans() { 
     return beans; 
    } 

    public void addBean(SessionInfo bean) { 
     try { 
      this.beans.add(removeProxyFromBean(bean)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    // Fetch the underlying bean that the proxy refers to 
    private SessionInfo removeProxyFromBean(SessionInfo proxiedBean) { 
     if (proxiedBean instanceof Advised) { 
      try { 
       return (SessionInfo) ((Advised) proxiedBean).getTargetSource().getTarget(); 
      } catch (Exception e) { 
       throw new RuntimeException(e); 
      } 
     } else { 
      return proxiedBean; 
     } 
    } 
} 

Naturellement, chaque fois que vous voulez ajouter bean session ou chercher une liste de tous les haricots, juste le SessionBeanHolder et lier automatiquement utiliser ses méthodes.

@Autowired 
    SessionBeanHolder sessionBeanHolder; 
Questions connexes