pas en cours d'exécution dans le cadre d'une demande, vous ne pouvez avoir aucune HttpSession
disponible. Même dans le contexte d'une demande, il peut (encore) ne pas créer de session.
Ce qui peut s'adapter à votre cas (bien que ce ne soit pas mieux que votre approche actuelle) utilise le RequestContextHolder du printemps.
Quelque chose comme
public static HttpSession getHttpSession() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return attr.getRequest().getSession(true);
}
travaillerai toujours (après avoir ajouté un chèque de getRequestAttributes
ne pas retourner null
) dans un conteneur de servlets (création d'une session, s'il n'y a pas).
Pour développer un peu, comme vous avez demandé à propos de l'injection (ou "déclaration globale") le HttpSession dans votre contrôleur. Les contrôleurs de Spring (c'est-à-dire les objets Java sous-jacents) sont des objets singleton très longs, ayant ce que l'on appelle "singleton scope". La session est un objet de "portée de session" donc ne peut pas être directement injectée au contrôleur (une dépendance doit être égale ou supérieure). On peut utiliser des proxies (ayant dans ce cas une portée singleton) résolvant des valeurs ayant par ex. portée de la session; mais cela ne vaut pas la peine dans votre cas. Pour plus d'informations, regardez la très bonne référence du printemps, en particulier au chapitre Bean scopes.
ya-t-il que j'ai essayé mais il donne le statut HTTP 404 au navigateur –
404 dans le navigateur? Toute trace de pile? – codependent
org.springframework.beans.factory.BeanCreationException: Erreur lors de la création du bean avec le nom 'ajaxFunctions': échec de l'injection de dépendances auto-générées; –