国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

[Spring MVC]-詳解SpringMVC的各種參數綁定方式

2019-11-26 13:27:33
字體:
來源:轉載
供稿:網友

SpringMVC的各種參數綁定方式

1. 基本數據類型(以int為例,其他類似):

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的參數變量名保持一致,就能完成數據綁定,如果不一致可以使用@RequestParam注解。需要注意的是,如果Controller方法參數中定義的是基本數據類型,但是從頁面提交過來的數據為null或者”"的話,會出現數據轉換的異常。也就是必須保證表單傳遞過來的數據不能為null或”",所以,在開發過程中,對可能為空的數據,最好將參數數據類型定義成包裝類型,具體參見下面的例子。

 2. 包裝類型(以Integer為例,其他類似):

Controller代碼:

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

表單代碼:

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

和基本數據類型基本一樣,不同之處在于,表單傳遞過來的數據可以為null或”",以上面代碼為例,如果表單中num為”"或者表單中無num這個input,那么,Controller方法參數中的num值則為null。

 3. 自定義對象類型:

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值一一匹配即可。

4. 自定義復合對象類型:

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對象中有ContactInfo屬性,Controller中的代碼和第3點說的一致,但是,在表單代碼中,需要使用“屬性名(對象類型的屬性).屬性名”來命名input的name。

5. 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 {  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>

其實,這和第4點User對象中的contantInfo數據的綁定有點類似,但是這里的UserListForm對象里面的屬性被定義成List,而不是普通自定義對象。所以,在表單中需要指定List的下標。值得一提的是,Spring會創建一個以最大下標值為size的List對象,所以,如果表單中有動態添加行、刪除行的情況,就需要特別注意,譬如一個表格,用戶在使用過程中經過多次刪除行、增加行的操作之后,下標值就會與實際大小不一致,這時候,List中的對象,只有在表單中對應有下標的那些才會有值,否則會為null,看個例子:

表單代碼:

<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>

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

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類似,也需要綁定在對象上,而不能直接寫在Controller方法的參數中。但是,綁定Set數據時,必須先在Set對象中add相應的數量的模型對象。

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綁定類似。

需要特別提醒的是,如果最大下標值大于Set的size,則會拋出org.springframework.beans.InvalidPropertyException異常。所以,在使用時有些不便。

 7. 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 {  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>

打印結果:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天柱县| 乾安县| 循化| 灌南县| 互助| 普格县| 巫溪县| 乌兰浩特市| 耒阳市| 玛纳斯县| 东乡族自治县| 阜新| 忻州市| 富锦市| 厦门市| 肥西县| 商丘市| 香格里拉县| 龙南县| 凤凰县| 临西县| 乐亭县| 泰顺县| 平阳县| 锡林浩特市| 阜新| 青岛市| 怀远县| 华容县| 敖汉旗| 肥城市| 建水县| 阿图什市| 延边| 平果县| 福清市| 琼结县| 通州市| 洪湖市| 石棉县| 汉阴县|