Spring MVC 處理模型資料

2021-10-10 19:35:02 字數 3912 閱讀 8953

map 及 model

sessionattributes

@modelattribute

瀏覽器發出請求,伺服器servlet對這個請求做出響應,會有乙個返回值,然後**到乙個頁面,那麼我們要把返回值在這個頁面上顯示出來

我們要做的就是把模型資料放到request域物件中

spring mvc 提供了以下幾種途徑輸出模型資料

modelandview可以作為控制器處理方法的返回值,它既包含檢視資訊,也包含模型資料資訊。

比如如下**中 new的modelandview 傳入的viewname就是檢視資訊,然後addobject就是新增了模型資料資訊,這一步其實是把這些放在了request域中,因此我們可以在頁面上通過$輸出 。

("/testmodelandview"

)public modelandview testmodelandview()

新增模型資料就是把資料放到request域中,有如下兩個方法

addobject

moelandview addobject

(string attributename, object

attributevalue)

addallobject

modelandview addallobject

(map

?> modelmap)

void

setview

(view view)

void

setviewname

(string viewname

控制器處理方法可以新增 map 型別(實際上也可以是 model 型別或 modelmap 型別)的引數

我們給傳入的map put 的鍵值對,就會被儲存在request域中,也可以通過get方法得到request域中儲存的值示例(

"/testmap"

)public string testmap

(map

map)

我們在頁面就可通過$獲取到資訊

1.若希望在多個請求之間共用某個模型屬性資料,則可以在

控制器類上標註乙個 @sessionattributes, spring mvc

將在模型中對應的屬性暫存到 httpsession 中。

2. 通俗點來說要想把控制器處理方法入參的map的資料放到session域中,可以在類上寫乙個@sessionattributes 註解,注意只能寫到類上

3. @sessionattributes 除了可以通過屬性名指定需要放到會

話中的屬性外(實際上使用的是 value 屬性值),還可以通過模型屬性的物件型別指定哪些

模型屬性需要放到會話中 示例

("/testsessionattributes"

)public string testsessionattributes

(map

map)

類上寫的是

@sessionattributes

(value=

, types=)(

"/springmvc"

)@controller

public

class

springmvctest

}

目標方法:

("/testmodelattribute"

)public string testmodelattribute

(user user)

就是我們呼叫目標方法前,會先呼叫上面的@modelattribute實現的方法,執行流程:

執行 @modelattribute 註解修飾的方法: 從資料庫中取出物件, 把物件放入到了 map 中. 鍵為: user

springmvc 從 map 中取出 user 物件, 並把表單的請求引數賦給該 user 物件的對應屬性.

springmvc 把上述物件傳入目標方法的引數.

注意: 在 @modelattribute 修飾的方法中, 放入到 map 時的鍵需要和目標方法入參型別的第乙個字母小寫的字串一致!

呼叫 @modelattribute 註解修飾的方法. 實際上把 @modelattribute 方法中 map 中的資料放在了 implicitmodel 中.

解析請求處理器的目標引數, 實際上該目標引數來自於 webdatabinder 物件的 target 屬性

1). 建立 webdatabinder 物件:

①. 確定 objectname 屬性:

若傳入的 attrname 屬性值為 「」, 則 objectname 為類名第乙個字母小寫.

注意: attrname. 若目標方法的 pojo 屬性使用了 @modelattribute 來修飾, 則 attrname 值即為 @modelattribute 的 value 屬性值

②. 確定 target 屬性:

1)在 implicitmodel 中查詢 attrname 對應的屬性值. 若存在, ok

2)若不存在: 則驗證當前 handler 是否使用了 @sessionattributes 進行修飾, 若使用了, 則嘗試從 session 中 獲取 attrname 所對應的屬性值. 若 session 中沒有對應的屬性值, 則丟擲了異常.

3)若 handler 沒有使用 @sessionattributes 進行修飾, 或 @sessionattributes 中沒有使用 value 值指定的 key和 attrname 相匹配, 則通過反射建立了 pojo 物件

2). springmvc 把表單的請求引數賦給了 webdatabinder 的 target 對應的屬性. 』

3). springmvc 會把 webdatabinder 的 attrname 和 target 給到 implicitmodel.

進而傳到 request 域物件中.

4). 把 webdatabinder 的 target 作為引數傳遞給目標方法的入參.

確定乙個 key:

1). 若目標方法的 pojo 型別的引數木有使用 @modelattribute 作為修飾, 則 key 為 pojo 類名第乙個字母的小寫

2). 若使用了 @modelattribute 來修飾, 則 key 為 @modelattribute 註解的 value 屬性值.

在 implicitmodel 中查詢 key 對應的物件, 若存在, 則作為入參傳入

1). 若在 @modelattribute 標記的方法中在 map 中儲存過, 且 key 和 1 確定的 key 一致, 則會獲取到.

若 implicitmodel 中不存在 key 對應的物件, 則檢查當前的 handler 是否使用 @sessionattributes 註解修飾,

若使用了該註解, 且 @sessionattributes 註解的 value 屬性值中包含了 key, 則會從 httpsession 中來獲取 key 所

對應的 value 值, 若存在則直接傳入到目標方法的入參中. 若不存在則將丟擲異常.

若 handler 沒有標識 @sessionattributes 註解或 @sessionattributes 註解的 value 值中不包含 key, 則

會通過反射來建立 pojo 型別的引數, 傳入為目標方法的引數

springmvc 會把 key 和 pojo 型別的物件儲存到 implicitmodel 中, 進而會儲存到 request 中.

springmvc處理模型資料

很多情況下頁面上需要很多資料,單單返回頁面是不行的,那麼springmvc如何將資料返回到該頁面呢 springmvc提供了四種方式來輸出模型資料 主要有兩個重要的變數 檢視 可以傳字串 檢視名字 也可以傳view物件 private object view 資料模型 本質是乙個map privat...

SpringMVC 處理模型資料

處理模型資料之modelandview springmvc提供了以下幾種途徑輸出模型資料 modelandview 處理方法返回值型別為modelandview時,方法即可通過該物件新增模型資料。map及model 入參為org.springframework.ui.model org.spring...

springmvc之處理模型資料

當我們採用對映路徑對映到方法處理完資料時,需要將資料顯示在頁面上。然而springmvc框架提供可以將模型資料暴露給檢視的解決方案。modelandview 當處理方法返回值型別為modelandview時,方法體即可通過該物件新增模型資料。modelattribute註解 在方法入參標記了該註解後...