Comment utiliser les atsortingbuts de session dans Spring-mvc

Pourriez-vous m’aider à écrire l’analogue de style mvc de spring de ce code?

session.setAtsortingbute("name","value"); 

Et comment append un élément annoté par l’annotation @ModelAtsortingbute à la session, puis y accéder?

Si vous souhaitez supprimer un object après chaque réponse, vous n’avez pas besoin de session,

Si vous souhaitez conserver l’object pendant la session utilisateur, il existe plusieurs façons:

  1. append directement un atsortingbut à la session:

     @RequestMapping(method = RequestMethod.GET) public Ssortingng testMestod(HttpServletRequest request){ ShoppingCart cart = (ShoppingCart)request.getSession().setAtsortingbute("cart",value); return "testJsp"; } 

    et vous pouvez l’obtenir du contrôleur comme ceci:

     ShoppingCart cart = (ShoppingCart)session.getAtsortingbute("cart"); 
  2. Rendez votre session de contrôleur plus étendue

     @Controller @Scope("session") 
  3. Portez les objects, par exemple, vous avez un object utilisateur qui doit être en session à chaque fois:

     @Component @Scope("session") public class User { Ssortingng user; /* setter getter*/ } 

    puis injecter la classe dans chaque contrôleur que vous voulez

      @Autowired private User user 

    qui garde la classe sur la session.

  4. L’injection de proxy AOP: au spring-xml:

          

    puis injecter la classe dans chaque contrôleur que vous voulez

     @Autowired private User user 

5.Passe la session Http à la méthode:

  Ssortingng index(HttpSession session) { session.setAtsortingbute("mySessionAtsortingbute", "someValue"); return "index"; } 

6.Faites ModelAtsortingbute en session Par @SessionAtsortingbutes (“ShoppingCart”):

  public Ssortingng index (@ModelAtsortingbute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) { //Spring V4 //you can modify session status by sessionStatus.setComplete(); } 

ou vous pouvez append le modèle à toute la classe de contrôleur telle

 @Controller @SessionAtsortingbutes("ShoppingCart") @RequestMapping("/req") public class MYController { @ModelAtsortingbute("ShoppingCart") public Visitor getShopCart (....) { return new ShoppingCart(....); //get From DB Or Session } } 

chacun a des avantages et des inconvénients:

@session peut utiliser plus de mémoire dans les systèmes de cloud computing, il copie les sessions à tous les nœuds, et la méthode directe (1 et 5) a une approche désordonnée, ce n’est pas bon pour les tests unitaires.

Pour accéder à la session jsp

 <%=session.getAttribute("ShoppingCart.prop")%> 

dans Jstl:

  

à Thymeleaf:

 

.

Utilisez @SessionAtsortingbutes

Voir la documentation: Utilisation de @SessionAtsortingbutes pour stocker les atsortingbuts de modèle dans la session HTTP entre les requêtes

” Comprendre le modèle Spring MVC et les atsortingbuts de session ” donne également une très bonne vue d’ensemble des sessions Spring MVC et explique comment / quand @ModelAtsortingbute s est transféré dans la session (si le contrôleur est @SessionAtsortingbutes annoté).

Cet article explique également qu’il est préférable d’utiliser @SessionAtsortingbutes sur le modèle au lieu de définir des atsortingbuts directement sur HttpSession, car cela aide Spring MVC à être @SessionAtsortingbutes de la vue.

SessionAtsortingbute annotation SessionAtsortingbute est la plus simple et directe au lieu d’obtenir une session à partir d’un object de requête et d’un atsortingbut de paramètre. N’importe quel object peut être ajouté au modèle dans le contrôleur et il sera stocké dans la session si son nom correspond à l’argument de l’annotation @SessionAtsortingbutes . Dans ci-dessous, par exemple, personObj sera disponible en session.

 @Controller @SessionAtsortingbutes("personObj") public class PersonController { @RequestMapping(value="/person-form") public ModelAndView personPage() { return new ModelAndView("person-page", "person-entity", new Person()); } @RequestMapping(value="/process-person") public ModelAndView processPerson(@ModelAtsortingbute Person person) { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("person-result-page"); modelAndView.addObject("pers", person); modelAndView.addObject("personObj", person); return modelAndView; } } 

Le code ci-dessous annoté définirait “value” à “name”

 @RequestMapping("/testing") @Controller public class TestController { @RequestMapping(method = RequestMethod.GET) public Ssortingng testMestod(HttpServletRequest request){ request.getSession().setAtsortingbute("name", "value"); return "testJsp"; } } 

Pour accéder à la même chose dans JSP, utilisez ${sessionScope.name} .

Pour le @ModelAtsortingbute voir ce lien

Lorsque j’essaie de me connecter (qui est un modal bootstrap), j’ai utilisé l’annotation @sessionatsortingbutes. 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 fermez les navigateurs. Voici un exemple de code

  @RequestMapping(value = "/login") @ResponseBody public BooleanResponse login(HttpSession session,HttpServletRequest request){ //HttpServletRequest used to take data to the controller Ssortingng username = request.getParameter("username"); Ssortingng password = request.getParameter("password"); //Here you set your values to the session session.setAtsortingbute("username", username); session.setAtsortingbute("email", email); //your code goes here } 

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 / )

N’est-ce pas plus simple et plus court de cette façon? Je le savais et je l’ai juste testé – en travaillant parfaitement ici:

 @GetMapping public Ssortingng hello(HttpSession session) { session.setAtsortingbute("name","value"); return "hello"; } 

ps Je suis venu ici en cherchant une réponse à ” Comment utiliser les atsortingbuts de session dans Spring-mvc “, mais j’en lis beaucoup 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 cette connaissance avec la solution la plus simple pour la question principale.

Essaye ça…

 @Controller @RequestMapping("/owners/{ownerId}/pets/{petId}/edit") @SessionAtsortingbutes("pet") public class EditPetForm { @ModelAtsortingbute("types") public Collection populatePetTypes() { return this.clinic.getPetTypes(); } @RequestMapping(method = RequestMethod.POST) public Ssortingng processSubmit(@ModelAtsortingbute("pet") Pet pet, BindingResult result, SessionStatus status) { new PetValidator().validate(pet, result); if (result.hasErrors()) { return "petForm"; }else { this.clinic.storePet(pet); status.setComplete(); return "redirect:owner.do?ownerId=" + pet.getOwner().getId(); } } } 

Utiliser cette méthode très simple facile à utiliser

 HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getNativeRequest(); request.getSession().setAtsortingbute("errorMsg", "your massage"); 

en jsp une fois utiliser puis enlever

  

Au spring 4 Web MVC. Vous pouvez utiliser @SessionAtsortingbute dans la méthode avec @SessionAtsortingbutes au niveau du contrôleur

 @Controller @SessionAtsortingbutes("SessionKey") public class OrderController extends BaseController { GetMapping("/showOrder") public Ssortingng showPage(@SessionAtsortingbute("SessionKey") SearchCriteria searchCriteria) { // method body }