SpringMVC 學習筆記(四) 處理模型資料

2021-09-07 10:23:45 字數 4670 閱讀 6578

/**

* 目標方法的返回值可以是 modelandview 型別。

* 其中可以包含檢視和模型資訊

* springmvc 會把 modelandview 的 model 中資料放入到 request 域物件中.

* @return

*/("/testmodelandview"

)public modelandview testmodelandview()

test modelandview

time:$
前台

success page

time:fri jan 04 23:35:47 cst 2019

/**

* 目標方法可以新增 map 型別(實際上也可以是 model 型別或 modelmap 型別)的引數.

* @param map

* @return

*/("/testmap"

)public string testmap

(map

map)

test map

name:$

前台

success page

time:

name:[tom, jerry, mike]

後台

org.springframework.validation.support.bindingawaremodelmap
新增註解(在類上)

@sessionattributes(value=, types=)
2.新增方法

/**

* @sessionattributes 除了可以通過屬性名指定需要放到會話中的屬性外(實際上使用的是 value 屬性值),

* 還可以通過模型屬性的物件型別指定哪些模型屬性需要放到會話中(實際上使用的是 types 屬性值)

* * 注意: 該註解只能放在類的上面. 而不能修飾放方法.

*/("/testsessionattributes"

)public string testsessionattributes

(map

map)

test sessionattributes

request user: $

session user: $

request school: $

session school: $

request user: user [username=tom, password=123456, [email protected], age=15, address=null] 

session user: user [username=tom, password=123456, [email protected], age=15, address=null]

request school: xq

session school: xq

@sessionattributes(value=, types=)
注意:sessionattributes註解引發的異常.有兩種解決方法:

public string testmodelattribute(@modelattribute(「abc」)user user)

新增 @modelattribute 註解修飾的方法

/**

* 1. 有 @modelattribute 標記的方法, 會在每個目標方法執行之前被 springmvc 呼叫!

* 2. @modelattribute 註解也可以來修飾目標方法 pojo 型別的入參, 其 value 屬性值有如下的作用:

* 1). springmvc 會使用 value 屬性值在 implicitmodel 中查詢對應的物件, 若存在則會直接傳入到目標方法的入參中.

* 2). springmvc 會一 value 為 key, pojo 型別的物件為 value, 存入到 request 中.

*/@modelattribute

public

void

getuser

(@requestparam

(value=

"id"

,required=

false

) integer id,

mapmap)}(

"/testmodelattribute"

)public string testmodelattribute

(user user)

action

="springmvc/testmodelattribute"

method

="post"

>

type

="hidden"

name

="id"

value

="1"

/>

username: type

="text"

name

="username"

value

="tom"

/>

>

email: type

="text"

name

="email"

value

="[email protected]"

/>

>

age: type

="text"

name

="age"

value

="12"

/>

>

type

="submit"

value

="submit"

/>

form

>

>

>

後台

//未加 @modelattribute 註解

修改: user [username=tom, password=null, email=tom@xq

.com, age=

13, address=null]

//新增 @modelattribute 註解

modelattribute method

從資料庫中獲取乙個物件: user [username=tom, password=

123456

, email=tom@atguigu

.com, age=

12, address=null]

修改: user [username=tom, password=

123456

, email=tom@xq

.com, age=

13, address=null]

執行流程:

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

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

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

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

springmvc 確定目標方法 pojo 型別入參的過程

確定乙個 key:

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

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

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

若在 @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的學習(四) 處理靜態資源

需要注意一種,dispatcherservlet攔截資源設定成了 是不會攔截jsp資源,但是它會攔截其他靜態資源,例如 html js 等等,那麼我們在使用jsp內部新增 靜態資源就無法成功,所以,我們需要單獨處理下靜態資源 處理方案 在springmvc的配置檔案中新增mvc命名空間下的標籤 修改...

揭秘四處碰壁小球之命運

有這麼乙個問題,初看起來人畜無害,但細思極恐,和大家分享。將小球的速度分解為沿x軸的v x和沿y軸的v y。因正方形邊長等於1,不妨令v x eb a,v y fb b。小球可以從e左側或者右側返回。從e左側返回時,小球沿兩軸走過的路程都是偶數。寫成方程就是 frac frac,m,n in mat...

Spring MVC學習筆記(四)

pointcut execution concert.performance.perform 定義命名的切點,為 pointcut註解設定的值是乙個切點表示式,通過在performance方法上新增 pointcut註解,我們實際上擴充套件了切點表示式語言,這樣就可以在任何的切點表達中使用perfo...