¿Bajo qué circunstancias exactas se borran @SessionAttributes? Descubrí un comportamiento confuso al tratar de usar dos modelos en una página.¿Cuándo se eliminan @SessionAttributes en SpringMVC? (Con código de ejemplo)
Cuando hago un GET seguido por un poste usando este controlador ...
@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";
}
}
... objeto2 se limpia del modelo. Ya no existe como @SessionAttribute y no se puede acceder en mi página de vista.
Sin embargo, si la firma del segundo método se modifica para esto ...
public String post(@ModelAttribute(value = "object1") Object1 object1,
@ModelAttribute(value = "object2") Object2 object2) {
... entonces objeto2 no ser anulado desde el modelo y está disponible en mi página de vista.
el Javadoc para @SessionAttributes dice:
... atributos serán eliminados una vez el controlador indica la finalización de su conversación sesión.
Pero no veo cómo he indicado la finalización de la sesión de conversación en el primer ejemplo, pero no en el segundo ejemplo.
¿Alguien puede explicar este comportamiento o es un error?
Este problema ha sido resuelto en la primavera 3.0RC1. Ver http://jira.springsource.org/browse/SPR-6084 Gracias Juergen! –