springmvc除過在方法上傳入原生的request和session外還能怎麼樣把資料帶給頁面???
1)、可以在方法處傳入map、或者model或者modelmap。
給這些引數裡面儲存的所有資料都會放在請求域中。可以在頁面獲取
關係:map,model,modelmap:最終都是bindingawaremodelmap(隱含模型)在工作;
相當於給bindingawaremodelmap中儲存的東西都會被放在請求域中;
map
(inte***ce
(jdk)
)model
(inte***ce
(spring))||
//||
// \/
//modelmap
(clas)
// \\ //
\\ //
extendedmodelmap
||\/
bindingawaremodelmap
3)、springmvc提供了一種可以臨時給session域中儲存資料的方式;
使用乙個註解 @sessionattributes(只能標在類上)
@sessionattributes(value=「msg」):
給bindingawaremodelmap中儲存的資料,或者modelandview中的資料,
同時給session中放乙份;
value指定儲存資料時要給session中放的資料的key;
value=
:只要儲存的是這種key的資料,給session中放乙份
types=
:只要儲存的是這種型別的資料,給session中也放乙份
後來推薦@sessionattributes就別用了,可能會引發異常;
給session中放資料請使用原生api;
**實現:
@sessionattributes
(value=
,types=
)@controller
public
class
modeltest
(value =
"/hello02"
)public string hello05
(modelmap modelmap)
("/hello03"
)public string hello06
(map
map)
/** * 返回值是modelandview;可以為頁面攜帶資料
* @return
*/("/hello04"
)public modelandview hello07()
}
@modelattribute註解:package com.czl.controller;
/** * 測試modelattribute註解;
* 使用場景:書城的圖書修改為例;
* 1)頁面端;
* 顯示要修改的圖書的資訊,圖書的所有欄位都在
* 2)servlet收到修改請求,呼叫dao;
* string sql="update bs_book set title=?,
* author=?,price=?,
* sales=?,stock=?,img_path=?
* where id=?";
* 3)實際場景?
* 並不是全欄位修改;只會修改部分字段,以修改使用者資訊為例;
* username password address;
* 1)、不修改的字段可以在頁面進行展示但是不要提供修改輸入框;
* 2)、為了簡單,controller直接在引數位置來寫book物件
* 3)、springmvc為我們自動封裝book;(沒有帶的值是null)
* 4)、如果接下來呼叫了乙個全欄位更新的dao操作;會將其他的字段可能變為null;
* sql = "update bs_book set"
* if(book.getbookname())
* if(book.getprice())
* * 4)、如何能保證全欄位更新的時候,只更新了頁面攜帶的資料;
* 1)、修改dao;代價大?
* 2)、book物件是如何封裝的?
* 1)、springmvc建立乙個book物件,每個屬性都有預設值,bookname就是null;
* 1、讓springmvc別建立book物件,直接從資料庫中先取出乙個id=100的book物件的資訊
* 2、book [id=100, bookname=西遊記, author=張三, stock=12, sales=32, price=98.98]
* * 2)、將請求中所有與book對應的屬性一一設定過來;
* 3、使用剛才從資料庫取出的book物件,給它 的裡面設定值;(請求引數帶了哪些值就覆蓋之前的值)
* 4、帶了的字段就改為攜帶的值,沒帶的字段就保持之前的值
* 3)、呼叫全欄位更新就有問題;
* 5、將之前從資料庫中查到的物件,並且封裝了請求引數的物件。進行儲存;
* * @author lfy
*//*@sessionattributes("haha")
* 最好不要使用:
* 1)為了避免可能引發的異常
* 保證兩點:
* 1、要麼隱含模型中有@sessionattributes標註的屬性;
* 2、如果隱含模型中沒有,而sessionattributes還標註有,就會拋異常
* */
@controller
public
class
modelattributetestcontroller
/** * 1)、springmvc要封裝請求引數的book物件不應該是自己new出來的。
* 而應該是【從資料庫中】拿到的準備好的物件
* 2)、再來使用這個物件封裝請求引數
* * @modelattribute:
* 引數:取出剛才儲存的資料
* 方法位置:這個方法就會提前於目標方法先執行;
* 1)我們可以在這裡提前查出資料庫中圖書的資訊
* 2)將這個圖書資訊儲存起來(方便下乙個方法還能使用)
* * 引數的map:bindingawaremodelmap
*//** * @modelattribute 標註的方法會提前執行並把方法的執行結果放在隱含模型中,
* 放的時候會使用乙個key;
* 如果 @modelattribute("book")指定了,就用指定的book;
* 如果沒有指定就用返回值的首字母小寫作為key
* @param map
* @return
*/// @modelattribute("haha")
@modelattribute
public book hahamymodelattribute
(map
map)
}
SpringMVC複習(四)響應資料傳出
springmvc除過在方法上傳入原生的request和session外還能怎麼樣把資料帶給頁面 繼承關係中map 或者model或者modelmap 後端 controller public class outputcontroller model 乙個介面 param model return ...
Spring MVC 資料傳遞
使用model方式 強烈建議使用 通過model物件進行資料傳遞 springmvc會自動建立模型物件傳到方法中,我們只需要往這個模型物件中新增資料即可 返回值為字串,我們可以理解為就是乙個檢視的名稱 寫路徑即可 data01 public string data01 model model 通用m...
SpringMVC 3 資料的傳入與傳出
預設獲取引數的規則 直接給方法引數上寫乙個與請求引數名相同的變數,這個變數就能獲取到請求的引數 獲取請求引數 預設該註解標註的引數,必須存在 requestparam ha string param param request.getparameter ha 三個屬性 value name 請求引數...