Dans quelles circonstances exactes @SessionAttributes est-il effacé? J'ai découvert un comportement déroutant en essayant d'utiliser deux modèles dans une page.Quand est-ce que @SessionAttributes dans SpringMVC est supprimé? (Avec l'exemple de code)
Quand je fais un EEG suivi d'un POST en utilisant ce contrôleur ...
@Controller
@RequestMapping("/myPage*")
@SessionAttributes(value = {"object1", "object2"})
public class MyController {
@RequestMapping(method = RequestMethod.GET)
public String get(Model model) {
model.addAttribute("object1", new Object1());
model.addAttribute("object2", new Object2());
return "myPage";
}
@RequestMapping(method = RequestMethod.POST)
public String post(@ModelAttribute(value = "object1") Object1 object1) {
//do something with object1
return "myPage";
}
}
... object2 est effacé du modèle. Il n'existe plus en tant que @SessionAttribute et n'est pas accessible sur ma page d'affichage.
Toutefois, si la signature de la deuxième méthode est modifiée à cette ...
public String post(@ModelAttribute(value = "object1") Object1 object1,
@ModelAttribute(value = "object2") Object2 object2) {
... alors object2 ne sont pas effacés du modèle et est disponible sur ma page de vue.
Le javadoc pour @SessionAttributes dit:
... attributs seront enlevés une fois le gestionnaire indique la fin de sa session de conversation.
Mais je ne vois pas comment j'ai indiqué l'achèvement de la session conversationnelle dans le premier exemple, mais pas dans le second exemple. Est-ce que quelqu'un peut expliquer ce comportement ou est-ce un bug?
Ce problème a été résolu au printemps 3.0RC1. Voir http://jira.springsource.org/browse/SPR-6084 Merci Juergen! –