博客
关于我
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/

你可能感兴趣的文章
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
查看>>
no connection could be made because the target machine actively refused it.问题解决
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>