spring mvc中,變量有一個作用域的概念,你可以很方便使用注解,就能實現變量的的設置,在各自的作用域內優雅的使用該變量。
ModelAttribute
假如有這樣一段代碼:
myRequestObject這個引用,經過spring的處理,會自動把addStuffToRequestScope這個方法的返回值MyCommandBean作為值保存下來。實際上spring的model緩存這個值,其實這個值是在request的getAttribute里面。當你調用controller里面某個@requestmapping注解的方法,都能取到這個model里面的值。
這個圖能說明一些問題:
可以看出,在controller渲染頁面之前,spring已經把ModelAttribute里面的值植入進去了。其實它的作用域就是當前請求。
SessionAttributes
在原來的代碼基礎之上,再添加一個注解,就表示這個變量會跟隨用戶的會話周期。只要用戶不退出或者SESSION過期,這個值就一直可以保留。當然,在當前的 request周期之內,調用getAttribute方法同樣也可以得到。
注意session與model的value名稱要一樣。
使用場景:
modelattribute:常量定義,比如key,value的映射。像下拉框,多選框等等
sessionattribute:跟用戶會話相關的常量,如用戶基本信息等
參考鏈接:understanding-spring-mvc-model-and-session-attributes
我的微信公眾號,歡迎溝通學習。
posted on 2016-03-10 20:02
alexcai 閱讀(2966)
評論(1) 編輯 收藏