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

springmvc前臺向后臺傳值幾種方式總結(jié)(從簡單到復(fù)雜)

 更新時間:2018年08月07日 09:47:48   作者:revent  
今天小編就為大家分享一篇springmvc前臺向后臺傳值幾種方式總結(jié)(從簡單到復(fù)雜),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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ù)轉(zhuǎn)換的異常。

也就是必須保證表單傳遞過來的數(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;
 
 省略set,get 方法
}

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. 自定義復(fù)合對象類型:

Model代碼:

public class ContactInfo {
 private String tel;
 private String address;

省略set ,get 

}

public class User {
 private String firstName;
 private String lastName;
 private ContactInfo contactInfo;
 
 省略set ,get 

}

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;
省略set ,get 

}

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">
<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>
 
</form>

其實,這和第4點User對象中的contantInfo數(shù)據(jù)的綁定有點類似,但是這里的UserListForm對象里面的屬性被定義成List,而不是普通自定義對象。

所以,在表單中需要指定List的下標。值得一提的是,spring會創(chuàng)建一個以最大下標值為size的List對象,所以,如果表單中有動態(tài)添加行、刪除行的情況,就需要特別注意,譬如一個表格,用戶在使用過程中經(jīng)過多次刪除行、增加行的操作之后,下標值就會與實際大小不一致,

這時候,List中的對象,只有在表單中對應(yīng)有下標的那些才會有值,否則會為null,看個例子:

表單代碼:

<form action="saysth.do" method="post">
 
<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>
 
</form>

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

aaa - bbb
ccc - ddd
null - null
null - null
.....
null - null 
eee - fff

6. Set綁定:

Set和List類似,也需要綁定在對象上,而不能直接寫在Controller方法的參數(shù)中。但是,綁定Set數(shù)據(jù)時,必須先在Set對象中add相應(yīng)的數(shù)量的模型對象。

Model代碼:

public class User {
 private String firstName;
 private String lastName;
省略set ,get 

}

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">
 <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>
 
</form>

基本和List綁定類似。

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

7. Map綁定:

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

Model代碼:

public class User {
 private String firstName;
 private String lastName;
省略set ,get 

}

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">
 <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>
 
</form>

以上這篇springmvc前臺向后臺傳值幾種方式總結(jié)(從簡單到復(fù)雜)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA連接mysql保姆級教學(xué)教程

    IDEA連接mysql保姆級教學(xué)教程

    學(xué)習使用IDEA的時候,需要連接Database,下面這篇文章主要給大家介紹了關(guān)于IDEA連接mysql的保姆級教學(xué)教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • 詳解非spring框架下使用querydsl的方法

    詳解非spring框架下使用querydsl的方法

    Querydsl是一個采用API代替拼湊字符串來構(gòu)造查詢語句,可跟 Hibernate 和 JPA 等框架結(jié)合使用。本文介紹的是非spring環(huán)境下querydsl JPA整合使用,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java如何實現(xiàn)自定義異常類

    Java如何實現(xiàn)自定義異常類

    這篇文章主要介紹了Java如何實現(xiàn)自定義異常類,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-02-02
  • SpringCloud使用集中配置組件Config規(guī)避信息泄露

    SpringCloud使用集中配置組件Config規(guī)避信息泄露

    項目應(yīng)用中,數(shù)據(jù)庫連接信息、Access-key、Secret-key等由于其及其敏感和特殊性,一旦泄露出去就很可能會使得應(yīng)用遭到黑客攻擊,例如數(shù)據(jù)庫賬號密碼泄露可能導(dǎo)致“拖庫”,甚至數(shù)據(jù)丟失。此等事件偶有發(fā)生,那么,在分布式微服務(wù)項目中,怎么避免這種情況呢
    2022-07-07
  • 通過Java組合問題看透回溯法

    通過Java組合問題看透回溯法

    今天給大家分享一道LeetCode算法題,題目不是很困難,但是從這到簡單的題目我們可以分析出回溯算法的幾個核心要點,感興趣的可以了解一下
    2022-09-09
  • idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作

    idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作

    這篇文章主要介紹了idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java操作文件路徑正反斜杠問題解決

    Java操作文件路徑正反斜杠問題解決

    最近在實現(xiàn)文件上傳時,windows與linux系統(tǒng)出現(xiàn)的問題,兩個系統(tǒng)中操作文件使用"\","/"導(dǎo)致IOException,本文主要介紹了Java操作文件路徑正反斜杠問題解決,感興趣的可以了解一下啊
    2024-01-01
  • Java SpringMVC的自定義異常類

    Java SpringMVC的自定義異常類

    這篇文章主要為大家詳細介紹了SpringMVC的自定義異常類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • JavaGUI常用三種布局使用介紹

    JavaGUI常用三種布局使用介紹

    這篇文章主要介紹了JavaGUI常用三種布局-FlowLayout、BorderLayout、GridLayout,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習吧
    2023-03-03
  • 使用MyBatis攔截器實現(xiàn)sql查詢權(quán)限動態(tài)修改代碼實例

    使用MyBatis攔截器實現(xiàn)sql查詢權(quán)限動態(tài)修改代碼實例

    這篇文章主要介紹了使用MyBatis攔截器實現(xiàn)sql查詢權(quán)限動態(tài)修改代碼實例,為了不耦合,現(xiàn)在的方案是在需要鑒權(quán)的Mybatis?Mapper方法上增加一個注解,在運行過程中判斷該注解存在即對sql進行修改,需要的朋友可以參考下
    2023-08-08

最新評論