日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC学习笔记四:数据绑定

發布時間:2025/4/5 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC学习笔记四:数据绑定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請注明原文地址:http://www.cnblogs.com/ygj0930/p/6831344.html?

參考:http://www.cnblogs.com/HD/p/4107674.html

一:數據綁定

1:基本類型的綁定

? ? 根據URL映射到某個處理函數時,函數的參數值自動在request中尋找同名的傳過來的頁面參數值。如果沒有則報錯,可以使用@RequestParam注解來修飾該函數參數,設置defaultValue,防止傳過來空值時報錯。

Controller代碼:

@RequestMapping("saysth.do") public void test(int count) {//參數名為count }

表單代碼:

<form action="saysth.do" method="post"> <input name="count" value="10" type="text"/>//標簽參數名為count ...... </form>

?

2:基本類型的包裝類型的綁定

? ? 根據URL映射到某個處理函數時,函數的參數值自動在request中尋找同名的傳過來的頁面參數值。允許參數值為空。

Controller代碼:

@RequestMapping("saysth.do") public void test(Integer count) {//參數名為count }

表單代碼:

<form action="saysth.do" method="post"> <input name="count" value="10" type="text"/>//標簽參數名為count ...... </form>

?

3:數組類型綁定

? ? 根據URL映射到某個處理函數時,函數參數為一個數組,則自動在request尋找名字同數組名的參數的值們并存入數組。

如:url?name=111&name=222&name=333;則函數參數中的數組int[] arr的值為{111,222,333}

?

4:簡單對象的綁定

? ??根據URL映射到某個處理函數時,函數參數為一個簡單的bean(即:類的屬性全為簡單數據類型的,并且定義了屬性的setter和getter方法)。

? ? 則自動從request的參數中尋找與bean類屬性同名的參數值賦給bean實例的同名屬性,構造出一個bean實例作為函數參數傳進函數中使用。

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>

非常簡單,只需將對象的屬性名和input的name值一一匹配即可。

?

5:多層級對象的綁定

? ??根據URL映射到某個處理函數時,函數參數為一個復雜的bean(bean中包含其他類實例作為成員屬性)。

? ? 則URL的格式為: url?一級bean中普通屬性=值&一級bean中的二級bean成員屬性.二級bean普通屬性=值...

? ? 比如:User類中有Info類成員屬性,Info類中有qq、phone屬性。則請求為:url?name=aaa&info.qq=88888&info.phone=99999

?

6:有相同屬性的對象參數綁定

? ??根據URL映射到某個處理函數時,如果函數的有兩個或以上的對象參數,并且有兩個或以上的參數的實例對象有相同類型、相同名字的屬性,則此時URL傳過來的參數值會同時賦給擁有該同名屬性的對象中去。解決辦法就是使用 自定義編輯器轉換數據,來規定什么格式的參數轉換為哪個對象的屬性值。

? ? 比如:url?user.name=111&person.name=000,自定義編輯器把 user. ?定義為user實例的前綴, person. 定義為person實例的前綴。則自動把參數值傳給user、person實例了。

?

7:List對象綁定

List需要綁定在對象上,而不能直接寫在Controller方法的參數中。
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 {//List需要綁定在一個對象中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) {//用對象來接收List內容,賦給對象中的list類型成員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>//頁面端通過 [] 為list元素屬性賦值 <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元素賦值,如:user[0]一下子跳到了user[10],則中間user[1~9]元素屬性值會是null,并且list大小為11而不是2。

?

8:Set對象綁定

Set和List類似,也需要綁定在對象上,而不能直接寫在Controller方法的參數中。并且,必須先在Set綁定的對象的中add相應的數量的模型對象,從而創建出相應大小的set。


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() {//要先add相應數量的元素,創建出相應大小的set空間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綁定類似,下標不能跳躍,不然前端傳過去的set就會大于綁定對象中的set,會報錯。一般不用set,很麻煩。

?

9:Map對象綁定

Map最為靈活,它也需要綁定在對象上,而不能直接寫在Controller方法的參數中。


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 {//把map綁定到對象中,作為一個對象屬性private Map<String, User> users;//domain類作為valuepublic 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>//以字符串作key,user對象作為value <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>

?

10:JSON數據綁定

當客戶端傳過來JSON格式的內容給請求處理參數時,我們需要把JSON格式的數據轉換為bean實例,可以通過 @RequestBody注解修飾函數參數,把request中body部分數據轉換為對象,然后把對象作為函數參數使用。

? ?

11:XML數據綁定

XML數據綁定比JSON多一步,作為請求處理函數的參數對象在定義時,需要添加一些XML解析的注解,來表明此對象對應于xml文件中的哪個element。

然后,通過 @RequestBody注解修飾函數參數,把request中body部分的xml格式數據轉換為對象,然后把對象作為函數參數使用。

?

總結

以上是生活随笔為你收集整理的SpringMVC学习笔记四:数据绑定的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。