免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
[Spring MVC]

SpringMVC的各種參數(shù)綁定方式

 

1. 基本數(shù)據(jù)類(lèi)型(以int為例,其他類(lèi)似):
Controller代碼:

@RequestMapping('saysth.do')public void test(int count) {}

表單代碼:

<form action='saysth.do' method='post'><input name='count' value='10' type='text'/>......</form>

表單中input的name值和Controller的參數(shù)變量名保持一致,就能完成數(shù)據(jù)綁定,如果不一致可以使用@RequestParam注解。需要注意的是,如果Controller方法參數(shù)中定義的是基本數(shù)據(jù)類(lèi)型,但是從頁(yè)面提交過(guò)來(lái)的數(shù)據(jù)為null或者”'的話(huà),會(huì)出現(xiàn)數(shù)據(jù)轉(zhuǎn)換的異常。也就是必須保證表單傳遞過(guò)來(lái)的數(shù)據(jù)不能為null或”',所以,在開(kāi)發(fā)過(guò)程中,對(duì)可能為空的數(shù)據(jù),最好將參數(shù)數(shù)據(jù)類(lèi)型定義成包裝類(lèi)型,具體參見(jiàn)下面的例子。

 

2. 包裝類(lèi)型(以Integer為例,其他類(lèi)似):
Controller代碼:

@RequestMapping('saysth.do')public void test(Integer count) {}

表單代碼:

<form action='saysth.do' method='post'><input name='count' value='10' type='text'/>......</form>

和基本數(shù)據(jù)類(lèi)型基本一樣,不同之處在于,表單傳遞過(guò)來(lái)的數(shù)據(jù)可以為null或”',以上面代碼為例,如果表單中num為”'或者表單中無(wú)num這個(gè)input,那么,Controller方法參數(shù)中的num值則為null。

 

3. 自定義對(duì)象類(lèi)型:
Model代碼:

public class User { private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }}

Controller代碼:

@RequestMapping('saysth.do')public void test(User user) {}

表單代碼:

<form action='saysth.do' method='post'><input name='firstName' value='張' type='text'/><input name='lastName' value='三' type='text'/>......</form>

非常簡(jiǎn)單,只需將對(duì)象的屬性名和input的name值一一匹配即可。

 

4. 自定義復(fù)合對(duì)象類(lèi)型:
Model代碼:

public class ContactInfo { private String tel; private String address; public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}public class User { private String firstName; private String lastName; private ContactInfo contactInfo; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public ContactInfo getContactInfo() { return contactInfo; } public void setContactInfo(ContactInfo contactInfo) { this.contactInfo = contactInfo; }}

Controller代碼:

@RequestMapping('saysth.do')public void test(User user) { System.out.println(user.getFirstName()); System.out.println(user.getLastName()); System.out.println(user.getContactInfo().getTel()); System.out.println(user.getContactInfo().getAddress());}

表單代碼:

<form action='saysth.do' method='post'><input name='firstName' value='張' /><br><input name='lastName' value='三' /><br><input name='contactInfo.tel' value='13809908909' /><br><input name='contactInfo.address' value='北京海淀' /><br><input type='submit' value='Save' /></form>

User對(duì)象中有ContactInfo屬性,Controller中的代碼和第3點(diǎn)說(shuō)的一致,但是,在表單代碼中,需要使用“屬性名(對(duì)象類(lèi)型的屬性).屬性名”來(lái)命名input的name。

 

5. List綁定:
List需要綁定在對(duì)象上,而不能直接寫(xiě)在Controller方法的參數(shù)中。
Model代碼:

public class User { private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }}public class UserListForm { private List<User> users; public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; }}

Controller代碼:

@RequestMapping('saysth.do')public void test(UserListForm userForm) { for (User user : userForm.getUsers()) { System.out.println(user.getFirstName() ' - ' user.getLastName()); }}

表單代碼:

<form action='saysth.do' method='post'><table><thead><tr><th>First Name</th><th>Last Name</th></tr></thead><tfoot><tr><td colspan='2'><input type='submit' value='Save' /></td></tr></tfoot><tbody><tr><td><input name='users[0].firstName' value='aaa' /></td><td><input name='users[0].lastName' value='bbb' /></td></tr><tr><td><input name='users[1].firstName' value='ccc' /></td><td><input name='users[1].lastName' value='ddd' /></td></tr><tr><td><input name='users[2].firstName' value='eee' /></td><td><input name='users[2].lastName' value='fff' /></td></tr></tbody></table></form>

其實(shí),這和第4點(diǎn)User對(duì)象中的contantInfo數(shù)據(jù)的綁定有點(diǎn)類(lèi)似,但是這里的UserListForm對(duì)象里面的屬性被定義成List,而不是普通自定義對(duì)象。所以,在表單中需要指定List的下標(biāo)。值得一提的是,Spring會(huì)創(chuàng)建一個(gè)以最大下標(biāo)值為size的List對(duì)象,所以,如果表單中有動(dòng)態(tài)添加行、刪除行的情況,就需要特別注意,譬如一個(gè)表格,用戶(hù)在使用過(guò)程中經(jīng)過(guò)多次刪除行、增加行的操作之后,下標(biāo)值就會(huì)與實(shí)際大小不一致,這時(shí)候,List中的對(duì)象,只有在表單中對(duì)應(yīng)有下標(biāo)的那些才會(huì)有值,否則會(huì)為null,看個(gè)例子:

表單代碼:

<form action='saysth.do' method='post'><table><thead><tr><th>First Name</th><th>Last Name</th></tr></thead><tfoot><tr><td colspan='2'><input type='submit' value='Save' /></td></tr></tfoot><tbody><tr><td><input name='users[0].firstName' value='aaa' /></td><td><input name='users[0].lastName' value='bbb' /></td></tr><tr><td><input name='users[1].firstName' value='ccc' /></td><td><input name='users[1].lastName' value='ddd' /></td></tr><tr><td><input name='users[20].firstName' value='eee' /></td><td><input name='users[20].lastName' value='fff' /></td></tr></tbody></table></form>

這個(gè)時(shí)候,Controller中的userForm.getUsers()獲取到List的size為21,而且這21個(gè)User對(duì)象都不會(huì)為null,但是,第2到第19的User對(duì)象中的firstName和lastName都為null。打印結(jié)果:

aaa - bbbccc - dddnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nullnull - nulleee - fff

 

6. Set綁定:
Set和List類(lèi)似,也需要綁定在對(duì)象上,而不能直接寫(xiě)在Controller方法的參數(shù)中。但是,綁定Set數(shù)據(jù)時(shí),必須先在Set對(duì)象中add相應(yīng)的數(shù)量的模型對(duì)象。
Model代碼:

public class User { private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }}public class UserSetForm { private Set<User> users = new HashSet<User>(); public UserSetForm() { users.add(new User()); users.add(new User()); users.add(new User()); } public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; }}

Controller代碼:

@RequestMapping('saysth.do')public void test(UserSetForm userForm) { for (User user : userForm.getUsers()) { System.out.println(user.getFirstName() ' - ' user.getLastName()); }}

表單代碼:

<form action='saysth.do' method='post'><table><thead><tr><th>First Name</th><th>Last Name</th></tr></thead><tfoot><tr><td colspan='2'><input type='submit' value='Save' /></td></tr></tfoot><tbody><tr><td><input name='users[0].firstName' value='aaa' /></td><td><input name='users[0].lastName' value='bbb' /></td></tr><tr><td><input name='users[1].firstName' value='ccc' /></td><td><input name='users[1].lastName' value='ddd' /></td></tr><tr><td><input name='users[2].firstName' value='eee' /></td><td><input name='users[2].lastName' value='fff' /></td></tr></tbody></table></form>

基本和List綁定類(lèi)似。
需要特別提醒的是,如果最大下標(biāo)值大于Set的size,則會(huì)拋出org.springframework.beans.InvalidPropertyException異常。所以,在使用時(shí)有些不便。

 

7. Map綁定:
Map最為靈活,它也需要綁定在對(duì)象上,而不能直接寫(xiě)在Controller方法的參數(shù)中。
Model代碼:

public class User { private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; }}public class UserMapForm { private Map<String, User> users; public Map<String, User> getUsers() { return users; } public void setUsers(Map<String, User> users) { this.users = users; }}

Controller代碼:

@RequestMapping('saysth.do')public void test(UserMapForm userForm) { for (Map.Entry<String, User> entry : userForm.getUsers().entrySet()) { System.out.println(entry.getKey() ': ' entry.getValue().getFirstName() ' - ' entry.getValue().getLastName()); }}

表單代碼:

<form action='saysth.do' method='post'><table><thead><tr><th>First Name</th><th>Last Name</th></tr></thead><tfoot><tr><td colspan='2'><input type='submit' value='Save' /></td></tr></tfoot><tbody><tr><td><input name='users['x'].firstName' value='aaa' /></td><td><input name='users['x'].lastName' value='bbb' /></td></tr><tr><td><input name='users['y'].firstName' value='ccc' /></td><td><input name='users['y'].lastName' value='ddd' /></td></tr><tr><td><input name='users['z'].firstName' value='eee' /></td><td><input name='users['z'].lastName' value='fff' /></td></tr></tbody></table></form>

打印結(jié)果:

x: aaa - bbby: ccc - dddz: eee - fff

 


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java中的實(shí)參與形參
開(kāi)源項(xiàng)目Xstream簡(jiǎn)介
Spring+Ibatis處理1對(duì)1數(shù)據(jù)表的例子
Eclipse RCP應(yīng)用程序中使用Databinding(邦定)
MVVM中的命令綁定及命令參數(shù)
virtual,override,new學(xué)習(xí) - 永不止步 - 51CTO技術(shù)博客
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服