2012-03-31 108 views
2

由于Spring Specification said,@ModelAttribute将在映射处理程序和@SessionAttribute将会话模型中保留模型属性之前执行。@ModelAttribute和Spring中的@SessionAttribute

请考虑以下情况:表单bean是在调用控制器后创建的,并且也设置为会话属性。下次调用MenuController时,createForm()将再次执行并创建另一个新的表单bean。我的问题是:将这个最新创建的表单bean设置为会话属性?哪个form bean会绑定到方法bookList()中的参数?

希望你们可以帮忙。谢谢。

@Controller 
@RequestMapping("/store") 
@SessionAttribute("form") 
public class MenuController { 
    @ModelAttribute("form") 
    public Form createForm() { 
    return new Form(); 
    } 

    @RqeustMapping("/book") 
    public String bookList(@ModelAttribute("form") Form form){ 
    //processing the form 
    } 
} 

回答

1

请记住,您的映射是一般化的。它将映射到GET方法和POST方法。

如果您的请求映射是GET方法,

会话属性将举行@ModelAttribute(“形式”)的从所述方法的CreateForm的值。

如果属性的形式从POST请求返回,

会话属性将覆盖从方法的CreateForm的@Model属性。

记住@ModelAttribute将在映射处理程序之前执行是有帮助的。

0

sessionAttribute表示“表单”将被保存在会话中。不意味着会从会话中检索“表单”。

相关问题