博客
关于我
springMVC前端传值的几种方法(基本数据类型、包装类型、自定义类型、集合)
阅读量:627 次
发布时间:2019-03-11

本文共 3720 字,大约阅读时间需要 12 分钟。

Spring Data Binding基础入门

在Spring MVC应用中,数据绑定是连接前端表单和后端Controller之间的桥梁。本文将详细介绍Spring支持的不同数据绑定类型,并提供实例说明。

1. 基本数据类型:以int为例

Controller代码

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

表单代码

...
  • name属性与Controller的参数名称一致即可实现数据绑定。
  • 如果表单提交的值为null或空值,可能会导致数据转换异常。

注意事项

  • 对于可能为空的值,建议使用包装类型(如Integer)进行处理,确保数据安全性。

2. 包装类型:以Integer为例

Controller代码

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

表单代码

...
  • 表单中值可以为null或空值,Controller方法参数中定义的值可以是null
  • 这种情况下,更适用于处理可能为空的数据。

3. 自定义对象类型

Model代码

public class User {    private String firstName;    private String lastName;    // set和get方法省略}

Controller代码

@RequestMapping("saysth.do")public void test(User user) {}

表单代码

...
  • 表单中input的name值与Controller的属性名称一致即可完成数据绑定。

4. 自定义复合对象类型

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());}

表单代码

...
  • 在表单中,输入字段的name值格式为“属性名(对象属性).属性名”,确保Spring能够正确绑定复合对象。

5. List绑定

Model代码

public class User {    private String firstName;    private String lastName;    // set和get方法省略}public class UserListForm {    private List
users; public List
getUsers() { return users; } public void setUsers(List
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());    }}

表单代码

...
  • List绑定需要绑定在对象上,而不是直接在Controller方法参数中。
  • 如果表单中存在动态添加或删除操作,需要注意List的大小与下标的关系。

注意事项

  • 如果下标值超过实际集合大小,会出现异常。确保下标值与集合大小一致。

6. Set绑定

Model代码

public class User {    private String firstName;    private String lastName;    // set和get方法省略}public class UserSetForm {    private Set
users = new HashSet<>(); public Set
getUsers() { return users; } public void setUsers(Set
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());    }}

表单代码

...
  • Set和List类似,需绑定在对象上。同时需要确保表单中存在足够的下标值或元素。

7. Map绑定

Model代码

public class User {    private String firstName;    private String lastName;    // set和get方法省略}public class UserMapForm {    private Map
users; public Map
getUsers() { return users; } public void setUsers(Map
users) { this.users = users; }}

Controller代码

@RequestMapping("saysth.do")public void test(UserMapForm userForm) {    for (Map.Entry
entry : userForm.getUsers().entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue().getFirstName() + " - " + entry.getValue().getLastName()); }}

表单代码

...
  • Map绑定允许使用任意的键名(字符串),与对应的值对象绑定。
  • 键值对需用方括号括起,键可使用单引号包装。

总结

  • 基本数据类型的绑定简单直接,只需保证值不为null或空值。
  • 包装类型适用于可能为空的值。
  • 自定义对象类型和复合对象类型需确保属性名称与表单字段名称一致。
  • List和Set绑定需要注意下标值与实际容量一致,防止异常。
  • Map绑定支持任意键名,方便处理复杂的数据场景。

通过合理选择和配置数据绑定类型,可以实现前后端的数据高效交互,充分发挥Spring的优势。

转载地址:http://klptz.baihongyu.com/

你可能感兴趣的文章
notepad如何自动对齐_notepad++怎么自动排版
查看>>
Notes on Paul Irish's "Things I learned from the jQuery source" casts
查看>>
Notification 使用详解(很全
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
NotImplementedError: Could not run torchvision::nms
查看>>
Now trying to drop the old temporary tablespace, the session hangs.
查看>>
nowcoder—Beauty of Trees
查看>>
np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
查看>>
np.power的使用
查看>>
NPM 2FA双重认证的设置方法
查看>>
npm build报错Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘解决方法
查看>>
npm build报错Cannot find module ‘webpack‘解决方法
查看>>
npm ERR! ERESOLVE could not resolve报错
查看>>
npm ERR! fatal: unable to connect to github.com:
查看>>
npm ERR! Unexpected end of JSON input while parsing near '...on":"0.10.3","direc to'
查看>>
npm ERR! Unexpected end of JSON input while parsing near ‘...“:“^1.2.0“,“vue-html-‘ npm ERR! A comp
查看>>
npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
查看>>
npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
查看>>
npm install CERT_HAS_EXPIRED解决方法
查看>>
npm install digital envelope routines::unsupported解决方法
查看>>