Pourriez-vous m'aider à écrire l'analogue de style mvc à ressort de ce code?
session.setAttribute("name","value");
Et comment ajouter un élément annoté par @ModelAttribute
annotation à la session, puis y accéder?
la source
Pourriez-vous m'aider à écrire l'analogue de style mvc à ressort de ce code?
session.setAttribute("name","value");
Et comment ajouter un élément annoté par @ModelAttribute
annotation à la session, puis y accéder?
Si vous souhaitez supprimer un objet après chaque réponse, vous n'avez pas besoin de session,
Si vous souhaitez conserver l'objet pendant la session utilisateur, il existe plusieurs moyens:
ajoutez directement un attribut à la session:
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
return "testJsp";
}
et vous pouvez l'obtenir du contrôleur comme ceci:
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
Rendre votre session de contrôleur limitée
@Controller
@Scope("session")
Portez les objets, par exemple, vous avez un objet utilisateur qui devrait être en session à chaque fois:
@Component
@Scope("session")
public class User
{
String user;
/* setter getter*/
}
puis injectez la classe dans chaque contrôleur que vous voulez
@Autowired
private User user
qui garde la classe en session.
L'injection de proxy AOP: au printemps -xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean id="user" class="com.User" scope="session">
<aop:scoped-proxy/>
</bean>
</beans>
puis injectez la classe dans chaque contrôleur que vous voulez
@Autowired
private User user
5.Passez HttpSession à la méthode:
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
6.Faites ModelAttribute en session par @SessionAttributes ("ShoppingCart"):
public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}
ou vous pouvez ajouter un modèle à toute la classe de contrôleur comme,
@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {
@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}
chacun a un avantage et un inconvénient:
@session peut utiliser plus de mémoire dans les systèmes cloud, il copie la session sur tous les nœuds, et la méthode directe (1 et 5) a une approche désordonnée, il n'est pas bon de tester unitaire.
Pour accéder à la session jsp
<%=session.getAttribute("ShoppingCart.prop")%>
dans Jstl:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
dans Thymeleaf:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>
User
bean ne fonctionnera que si vous appelez le bean dans une classe qui est égalementsession
portée, sinon si aucune session n'existe, alors elle lève une exception car il n'y aurait pas de session active dans le contexte @runtime lorsque nous injectons leuser
bean dans une autre classe !!Utilisation
@SessionAttributes
Voir la documentation: Utilisation de @SessionAttributes pour stocker les attributs de modèle dans la session HTTP entre les requêtes
« Comprendre le modèle Spring MVC et les attributs de session » donne également un très bon aperçu des sessions Spring MVC et explique comment / quand les
@ModelAttribute
s sont transférés dans la session (si le contrôleur est@SessionAttributes
annoté).Cet article explique également qu'il est préférable de l'utiliser
@SessionAttributes
sur le modèle au lieu de définir des attributs directement sur HttpSession, car cela aide Spring MVC à être indépendant de la vue.la source
SessionAttribute
l'annotation est la plus simple et la plus directe au lieu d'obtenir une session à partir de l'objet de demande et de l'attribut de réglage. Tout objet peut être ajouté au modèle dans le contrôleur et il sera stocké en session si son nom correspond à l'argument dans l'@SessionAttributes
annotation. En dessous par exemple,personObj
sera disponible en session.la source
Le code annoté ci-dessous définirait "valeur" sur "nom"
Pour accéder à la même utilisation dans JSP
${sessionScope.name}
.Pour le
@ModelAttribute
voir ce lienla source
N'est-ce pas ainsi le plus simple et le plus court ? Je le savais et je l'ai juste testé - fonctionnant parfaitement ici:
ps Je suis venu ici à la recherche d'une réponse sur " Comment utiliser les attributs de session dans Spring-mvc ", mais j'en ai lu autant sans voir le plus évident que j'avais écrit dans mon code. Je ne l'ai pas vu, alors j'ai pensé que c'était faux, mais non, ce n'était pas le cas. Partageons donc ces connaissances avec la solution la plus simple pour la question principale.
la source
Essaye ça...
la source
Lorsque j'essaie de me connecter (qui est un modal bootstrap), j'ai utilisé l'annotation @sessionattributes. Mais le problème était lorsque la vue est une redirection ("redirect: / home"), les valeurs que j'ai entrées dans la session s'affichent dans l'url. Certaines sources Internet suggèrent de suivre http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#mvc-redirecting Mais j'ai plutôt utilisé HttpSession. Cette session sera là jusqu'à ce que vous fermiez les navigateurs. Voici un exemple de code
Vous ne changez pas de chose spécifique du côté de la vue.
Après la connexion, ajoutez les codes ci-dessus à n'importe quel endroit de votre site Web. Si la session est correctement définie, vous y verrez les valeurs. Assurez-vous d'avoir correctement ajouté les balises jstl et les expressions El- (Voici le lien pour définir les balises jstl https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project- correctement / )
la source
Utilisez cette méthode très simple et facile à utiliser
dans jsp une fois utiliser puis supprimer
la source
Au printemps 4 Web MVC. Vous pouvez utiliser
@SessionAttribute
dans la méthode avec@SessionAttributes
au niveau du contrôleurla source