W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
ModelMap
類其實(shí)就是一個(gè)豪華版的 Map
,它使得你為視圖展示需要所添加的對(duì)象都遵循一個(gè)顯而易見的約定被命名。請(qǐng)看下面這個(gè) Controller
實(shí)現(xiàn),并請(qǐng)注意,添加到ModelAndView
中去的對(duì)象都沒有顯式地指定鍵名。
public class DisplayShoppingCartController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
List cartItems = // 拿到一個(gè)CartItem對(duì)象的列表
User user = // 拿到當(dāng)前購(gòu)物的用戶User
ModelAndView mav = new ModelAndView("displayShoppingCart"); <-- 邏輯視圖名
mav.addObject(cartItems); <-- 啊哈,直接添加的對(duì)象,沒有指定名稱
mav.addObject(user); <-- 啊哈再來(lái)一次
return mav;
}
}
ModelAndView
內(nèi)部使用了一個(gè)ModelMap
類,它是Map
的一個(gè)實(shí)現(xiàn),會(huì)自動(dòng)為添加進(jìn)來(lái)的對(duì)象生成一個(gè)鍵名。為添加對(duì)象生成名稱的策略是,若添加對(duì)象是一個(gè)純Java bean(a scalar object),比如User
,那么使用對(duì)象類的短類名(short class name)來(lái)作為該對(duì)象的名稱。下面是一些例子,展示了為添加到ModelMap
實(shí)例中的純Java對(duì)象所生成的名稱:
x.y.User
實(shí)例,為其生成的名稱為user
x.y.Registration
實(shí)例,為其生成的名稱為registration
x.y.Foo
實(shí)例,為其生成的名稱為foo
java.util.HashMap
實(shí)例,為其生成的名稱為hashMap
。這種情況下,顯式地聲明一個(gè)鍵名可能更好,因?yàn)?code>hashMap的約定并非那么符合直覺null
值將導(dǎo)致程序拋出一個(gè)IllegalArgumentException
參數(shù)非法異常。若你所添加的(多個(gè))對(duì)象有可能為null
值,那你也需要顯式地指定它(們)的名字啥?鍵名不能自動(dòng)變復(fù)數(shù)形式么?
Spring Web MVC的約定優(yōu)于配置支持尚不能支持自動(dòng)復(fù)數(shù)轉(zhuǎn)換。這意思是,你不能期望往ModelAndView
中添加一個(gè)Person
對(duì)象的List
列表時(shí),框架會(huì)自動(dòng)為其生成一個(gè)名稱people
。
這個(gè)決定是經(jīng)過(guò)許多爭(zhēng)論后的結(jié)果,最終“最小驚喜原則”勝出并為大家所接受。
為集合Set
或列表List
生成鍵名所采取的策略,是先檢查集合的元素類型、拿到第一個(gè)對(duì)象的短類名,然后在其后面添加List
作為名稱。添加數(shù)組對(duì)象也是同理,盡管對(duì)于數(shù)組我們就不需再檢查數(shù)組內(nèi)容了。下面給出的幾個(gè)例子可以闡釋一些東西,讓集合的名稱生成語(yǔ)義變得更加清晰:
x.y.User
元素類型的數(shù)組x.y.User[]
,為其生成的鍵名是userList
x.y.User
元素類型的數(shù)組x.y.Foo[]
,為其生成的鍵名是fooList
x.y.User
元素類型的數(shù)組java.util.ArrayList
,為其生成的鍵名是userList
x.y.Foo
元素類型的數(shù)組java.util.HashSet
,為其生成的鍵名是fooList
java.util.ArrayList
則根本不會(huì)被添加Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: