最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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ù)類型,但是從頁面提交過來的數(shù)據(jù)為null或者”"的話,會出現(xiàn)數(shù)據(jù)轉換的異常。也就是必須保證表單傳遞過來的數(shù)據(jù)不能為null或”",所以,在開發(fā)過程中,對可能為空的數(shù)據(jù),最好將參數(shù)數(shù)據(jù)類型定義成包裝類型,具體參見下面的例子。

 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ù)類型基本一樣,不同之處在于,表單傳遞過來的數(shù)據(jù)可以為null或”",以上面代碼為例,如果表單中num為”"或者表單中無num這個input,那么,Controller方法參數(shù)中的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方法的參數(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>

其實,這和第4點User對象中的contantInfo數(shù)據(jù)的綁定有點類似,但是這里的UserListForm對象里面的屬性被定義成List,而不是普通自定義對象。所以,在表單中需要指定List的下標。值得一提的是,Spring會創(chuàng)建一個以最大下標值為size的List對象,所以,如果表單中有動態(tài)添加行、刪除行的情況,就需要特別注意,譬如一個表格,用戶在使用過程中經過多次刪除行、增加行的操作之后,下標值就會與實際大小不一致,這時候,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 - 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類似,也需要綁定在對象上,而不能直接寫在Controller方法的參數(shù)中。但是,綁定Set數(shù)據(jù)時,必須先在Set對象中add相應的數(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 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方法的參數(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>

打印結果:

x: aaa - bbb
y: ccc - ddd
z: eee - fff

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

相關文章

  • Java OpenCV實現(xiàn)圖像鏡像翻轉效果

    Java OpenCV實現(xiàn)圖像鏡像翻轉效果

    這篇文章主要為大家詳細介紹了Java OpenCV實現(xiàn)圖像鏡像翻轉效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java實現(xiàn)兩人五子棋游戲(二) 畫出棋盤

    Java實現(xiàn)兩人五子棋游戲(二) 畫出棋盤

    這篇文章主要為大家詳細介紹了Java實現(xiàn)兩人五子棋游戲,畫出五子棋的棋盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • mybatis如何在一個update標簽中寫多條update語句

    mybatis如何在一個update標簽中寫多條update語句

    這篇文章主要介紹了mybatis如何在一個update標簽中寫多條update語句問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring Boot利用Docker快速部署項目的完整步驟

    Spring Boot利用Docker快速部署項目的完整步驟

    這篇文章主要給大家介紹了關于Spring Boot利用Docker快速部署項目的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • Flink實現(xiàn)特定統(tǒng)計的歸約聚合reduce操作

    Flink實現(xiàn)特定統(tǒng)計的歸約聚合reduce操作

    這篇文章主要介紹了Flink實現(xiàn)特定統(tǒng)計的歸約聚合reduce操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • Spring和SpringBoot比較及區(qū)別解惑

    Spring和SpringBoot比較及區(qū)別解惑

    這篇文章主要介紹了Spring和SpringBoot比較解惑區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Java class文件格式之方法_動力節(jié)點Java學院整理

    Java class文件格式之方法_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java class文件格式之方法的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 關于SpringBoot中Ajax跨域以及Cookie無法獲取丟失問題

    關于SpringBoot中Ajax跨域以及Cookie無法獲取丟失問題

    這篇文章主要介紹了關于SpringBoot中Ajax跨域以及Cookie無法獲取丟失問題,本文具有參考意義,遇到相同或者類似問題的小伙伴希望可以從中找到靈感
    2023-03-03
  • @Cacheable 拼接key的操作

    @Cacheable 拼接key的操作

    這篇文章主要介紹了@Cacheable 拼接key的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 教你bat腳本一鍵配置java開發(fā)環(huán)境

    教你bat腳本一鍵配置java開發(fā)環(huán)境

    公司新入職一名員工,項目經理讓我安排新人工作,首先需要對java開發(fā)相關環(huán)境進行配置安裝,但時常會因為安裝配置不到位或者操作錯誤導致時間的浪費,所以在空余時間收集了一系列軟件的免安裝版本,感興趣的朋友一起看看吧
    2021-12-12

最新評論

慈利县| 白山市| 全椒县| 闻喜县| 漠河县| 无极县| 彭山县| 潞西市| 育儿| 永安市| 南和县| 勐海县| 鄂尔多斯市| 米泉市| 呼图壁县| 湖南省| 广西| 济源市| 邢台市| 通城县| 丁青县| 安平县| 新源县| 张家界市| 丽江市| 惠州市| 五指山市| 阿瓦提县| 育儿| 潼南县| 百色市| 固镇县| 木兰县| 绩溪县| 岐山县| 闸北区| 湘潭县| 长海县| 宜宾县| 呼图壁县| 察隅县|