欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年12月12日 14:37:41   作者:橫渡  
本篇文章主要介紹了SpringMVC的各種參數(shù)綁定方式 ,具有一定的參考價(jià)值,有需要的可以了解一下。

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

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

 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>

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

 3. 自定義對(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;
  }

}

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ì)象類型:

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)命名input的name。

5. List綁定:

List需要綁定在對(duì)象上,而不能直接寫在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)類似,但是這里的UserListForm對(duì)象里面的屬性被定義成List,而不是普通自定義對(duì)象。所以,在表單中需要指定List的下標(biāo)。值得一提的是,Spring會(huì)創(chuàng)建一個(gè)以最大下標(biāo)值為size的List對(duì)象,所以,如果表單中有動(dòng)態(tài)添加行、刪除行的情況,就需要特別注意,譬如一個(gè)表格,用戶在使用過(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 - bbb
ccc - ddd
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
eee - fff

6. Set綁定:

Set和List類似,也需要綁定在對(duì)象上,而不能直接寫在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綁定類似。

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

 7. Map綁定:

Map最為靈活,它也需要綁定在對(duì)象上,而不能直接寫在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 - bbb
y: ccc - ddd
z: eee - fff

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡(jiǎn)單探索 Java 中的惰性計(jì)算

    簡(jiǎn)單探索 Java 中的惰性計(jì)算

    這篇文章主要介紹了簡(jiǎn)單探索 Java 中的惰性計(jì)算,惰性計(jì)算(盡可能延遲表達(dá)式求值)是許多函數(shù)式編程語(yǔ)言的特性。惰性集合在需要時(shí)提供其元素,無(wú)需預(yù)先計(jì)算它們,這帶來(lái)了一些好處。,需要的朋友可以參考下
    2019-06-06
  • Java中ArrayList的工作原理詳解

    Java中ArrayList的工作原理詳解

    本文主要介紹了Java中ArrayList的工作原理,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • 解決IntelliJ IDEA創(chuàng)建spring boot無(wú)法連接http://start.spring.io/問(wèn)題

    解決IntelliJ IDEA創(chuàng)建spring boot無(wú)法連接http://start.spring.io/問(wèn)題

    這篇文章主要介紹了解決IntelliJ IDEA創(chuàng)建spring boot無(wú)法連接http://start.spring.io/問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot將所有依賴(包括本地jar包)打包到項(xiàng)目

    SpringBoot將所有依賴(包括本地jar包)打包到項(xiàng)目

    這篇文章主要介紹了SpringBoot將所有依賴(包括本地jar包)打包到項(xiàng)目,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 詳解Java設(shè)計(jì)模式之備忘錄模式的使用

    詳解Java設(shè)計(jì)模式之備忘錄模式的使用

    這篇文章主要介紹了Java設(shè)計(jì)模式之備忘錄模式的使用,備忘錄模式中的發(fā)起者和管需要的朋友可以參考下
    2016-02-02
  • java去掉文本中多余的空格與空行實(shí)例代碼

    java去掉文本中多余的空格與空行實(shí)例代碼

    在最近的一個(gè)項(xiàng)目中發(fā)現(xiàn)用戶提交的數(shù)據(jù)中多了很多多余的空格與空行,為了不影響使用,只能想辦法去掉了,下面這篇文章主要給大家介紹了關(guān)于java去掉文本中多余的空格與空行的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • Java中ArrayList在foreach里remove的問(wèn)題詳析

    Java中ArrayList在foreach里remove的問(wèn)題詳析

    這篇文章主要給大家介紹了關(guān)于Java中ArrayList在foreach里remove問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-09-09
  • Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文件的方法

    Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文

    這篇文章主要介紹了Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重復(fù)讀取配置文件的方法,需要的朋友可以參考下
    2015-12-12
  • Java兩整數(shù)相除向上取整的方式詳解(Math.ceil())

    Java兩整數(shù)相除向上取整的方式詳解(Math.ceil())

    在調(diào)外部接口獲取列表數(shù)據(jù)時(shí),需要判斷是否已經(jīng)取完了所有的值,因此需要用到向上取整,下面這篇文章主要給大家介紹了關(guān)于Java兩整數(shù)相除向上取整的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • MyBatis別名和settings設(shè)置方式

    MyBatis別名和settings設(shè)置方式

    這篇文章主要介紹了MyBatis別名和settings設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論