2010-06-08 6 views
3

Le code suivant retourne null:l'aide d'une session Scoped Bean

AController.java 

    private MyAppUser getMyAppUser(HttpSession session) { 
     MyAppUser myAppUser = (MyAppUser) session.getAttribute("myAppUserManager"); 
     return myAppUser; 
    } 

J'ai aussi essayé:

AController.java 

@Autowired 
MyAppUser myAppUser; 

Malgré le fait que je suit dans mon contexte:

<bean id="myAppUserManager" class="com.myapp.profile.MyAppUser" scope="session"/> 

Cela n'a aucun sens pour moi, le haricot "myAppUser" est un haricot qui ne peut absolument pas être nul, et je dois être abl e pour le référencer depuis les contrôleurs, je n'en ai pas besoin dans les services ou les référentiels, juste les contrôleurs, mais il ne semble pas être stocké dans la session, le cas d'utilisation est extrêmement simple, mais je n'ai pas pu aller au fond de ce qui ne va pas, ou trouver une bonne solution de contournement

Répondre

2

Les beans de portée session ne sont pas disponibles dans la session comme ça. Spring les gère, et les stocke dans la session, mais pas d'une manière que vous pouvez les pêcher manuellement.

Si vous voulez utiliser le haricot, vous le reliez à vos autres haricots, comme n'importe quel autre haricot. Cependant, il y a certaines choses à surveiller - voir here. Essentiellement, si vous voulez câbler le bean A à la session A, bean B doit également avoir une portée de session (ou une portée de demande), sauf si vous utilisez scoped-proxies - voir le lien précédent pour savoir comment faire cette.

+0

Le code I lié est dans un contrôleur annoté, donc je ne peux pas lier dans les propriétés dans la configuration comme le fait la documentation que vous avez référencé. En fait, j'avais déjà regardé cette documentation. J'ai aussi besoin de cet objet dans chaque contrôleur, donc je ne vais pas tout convertir en XML. J'ai aussi essayé d'auto-générer le "myAppUser", qui a échoué avec une exception sur le déploiement, est-ce que le contrôleur n'est pas une session ou une demande étendue? Je trouve cela difficile à croire. – walnutmon

+0

@jboyd: Les contrôleurs ont une portée singleton par défaut, comme n'importe quel autre bean. De plus, vous n'avez pas besoin de placer les contrôleurs en XML - seul le bean tronqué doit être défini en XML, avec '' défini dedans. – skaffman

Questions connexes