SessionAttributes和ModelAttribute

* SpringMVC 肯定目標方法 POJO 類型入參的過程
* 1. 取得POJO入參的 key:
*        1). 若目標方法的 POJO 類型的參數沒有使用 @ModelAttribute 做爲修飾, 則 key 爲 POJO 類名第一個字母的小寫
*        2). 若使用了 @ModelAttribute 來修飾, 則 key 爲 @ModelAttribute 註解的 value 屬性值.
* 2. 在 implicitModel (注意,使用ModelAttribute註解的類的返回的模型會被放到implicitModel中)中查找 key 對應的對象, 若存在, 則做爲入參傳入
*         1). 若在 @ModelAttribute 標記的方法中在 Map 中保存過, 且 key 和 1 肯定的 key 一致, 則會獲取到.
* 3. 若 implicitModel 中不存在 key 對應的對象, 則檢查當前的 Handler 是否使用 @SessionAttributes 註解修飾,
*        若使用了該註解, 且 @SessionAttributes 註解的 value 屬性值中包含了 key, 則會從 HttpSession 中來獲取 key 所
*        對應的 value 值, 若存在則直接傳入到目標方法的入參中. 若不存在則將拋出異常. (這裏注意,若是使用SessionAttributes定義的key,你沒有事先放到model裏面,那麼任 *        什麼時候候視圖獲取這個key的對象,都會拋出異常)
* 4. 若 Handler 沒有標識 @SessionAttributes 註解或 @SessionAttributes 註解的 value 值中不包含 key, 則
*      會經過反射來建立 POJO 類型的參數, 傳入爲目標方法的參數
* 5. SpringMVC 會把 key 和 POJO 類型的對象保存到 implicitModel 中, 進而會保存到 request 中.數組

 

SessionAttributessession

  默認狀況下Spring MVC將模型中的數據存儲到request域中。當一個請求結束後,數據就失效了。
       若是要跨頁面使用。那麼須要使用到session。而@SessionAttributes註解就可使得模型中的數據存儲一份到session域中。app

參數spa

  一、names:這是一個字符串數組。裏面應寫須要存儲到session中數據的名稱。
       二、types:根據指定參數的類型,將模型中對應類型的參數存儲到session中
    三、value:其實和names是同樣的rest

這樣在修飾的控制器類中的全部@requrestMapping的方法中放入model的key的值若是在names/value中定義了,那麼這個key和對象就會被放到session域中,
若是這個key沒有被放入model而取出來的話,會爆出異常。對象

ModelAttributeci

modelsttribute修飾的方法,會在全部的requestmapping方法調用以前先執行。這個方法能夠在一些預處理工做,能夠向model中放入數據。字符串

modelsttribute修飾入參,實際上就是修改了入參的id,這樣就可以經過id取出model中的數據了。。it

 

注意在controller的這個Model的體系中,id是很是重要的,不指定時,id就是類名首字母小寫io

相關文章
相關標籤/搜索