2012-03-31 86 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表示「表單」將被保存在會話中。不意味着會從會話中檢索「表單」。

相關問題