SpringMVC 复杂对象数据绑定
表单在 web 页面上无处不在,有些表单可能很复杂,大部分表单里的输入项都会对应后端对象属性。
SpringMVC 可以自动将表单值绑定到对象上!而且能绑定很复杂的对象!!
这里就不写那些基本的表单绑定了。
我想写工作中遇到的一个情况,就是想转换成一个 List 对象,并且这个对象里面有属性也是 List 的。
public class ProjectDO{
//其他属性就省略了
//团队成员
private List<ProjectTeamInfoDO> teaminfoList;
}
public class ProjectTeamInfoDO {
//学历信息
private List<ProjectCollegeDO> college;
}
public class ProjectCollegeDO{
// 专业
private String major;
// 学校
private String school;
// 学位
private String diploma;
}
解释下意思,项目类里有个属性存放团队成员信息的,肯定有多个成员对吧,所以是 List 类型。每个团队成员又有学历信息,那学历也有很多,本科、硕士、博士啊之类的,所以也是 List 类型的。
这个对像已经算是复杂了,那应该怎样让它自动绑定起来呢?
说难不难,说简单也不简单。
先说说为什么简单,我们来看看怎么写这个表单才能自动绑定上去。
<form action="/createdProject.htm" >
//第一个团队成员 ,第一个学历
<input type="text" name="teaminfoList[0].college[0].major">
<input type="text" name="teaminfoList[0].college[0].school">
<input type="text" name="teaminfoList[0].college[0].diploma">
//第一个团队成员 ,第二个学历
<input type="text" name="teaminfoList[0].college[1].major">
<input type="text" name="teaminfoList[0].college[1].school">
<input type="text" name="teaminfoList[0].college[1].diploma">
//第二个团队成员 ,第一个学历
<input type="text" name="teaminfoList[1].college[0].major">
<input type="text" name="teaminfoList[1].college[0].school">
<input type="text" name="teaminfoList[1].college[0].diploma">
</form>
@RequestMapping("/createdProject.htm")
public String createdProjects(ProjectDO Project){
//project 就是绑定后的对象
}
看,form 结构是不是很简单,其实就是一个二维数组。name 值带上对应的下标就行。
那又难在哪呢?
难在下标的生成,团队成员人数是未知的,不知道这个数组应该有多长,所以下标都是后面用 js 动态生成的。
添加、删除的时候下标都需要变动,还有编辑草稿加载之前缓存的信息下标也要变动。
有个问题需要注意的是绑定 List 类型的时候,会根据 input name 值下标来确定 List 长度。
比如
<input type="text" name="teaminfoList[2].college[0].major">
那 teaminfoList 的长度就是 3 了。前面两个 0 和 1 都为 null。
中间或者前面空掉的数字都会是 null ,所以后端接收到绑定后的对象要注意移除那些空对象。如果前端能保证下标连续的话就最好了。
via:http://deadlion.cn/2016/05/14/SpringMVC-复杂对象数据绑定.html
SpringMVC 复杂对象数据绑定的更多相关文章
- SpringMVC类型转换、数据绑定
SpringMVC类型转换.数据绑定详解[附带源码分析] 目录 前言 属性编辑器介绍 重要接口和类介绍 部分类和接口测试 源码分析 编写自定义的属性编辑器 总结 参考资料 前言 SpringMVC是目 ...
- SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解
SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解 博客分类: 跟开涛学SpringMVC 6.6.2.@RequestParam绑定单个请求参数值 @RequestParam用于 ...
- springMVC接受对象实体并且对象实体里面又有对象集合方式
springMVC接受对象实体并且对象实体里面又有对象集合方式: Ajax: function add(){ var orders = [ { orderNo : "H222255" ...
- SpringMVC类型转换、数据绑定详解[附带源码分析]
目录 前言 属性编辑器介绍 重要接口和类介绍 部分类和接口测试 源码分析 编写自定义的属性编辑器 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那 ...
- SpringMVC类型转换、数据绑定详解
public String method(Integer num, Date birth) { ... } Http请求传递的数据都是字符串String类型的,上面这个方法在Controller中定义 ...
- springMVC传对象参数、返回JSON格式数据
假如请求路径:http://localhost/test/test.do?user.id=1 后台接收参数的方法如下: @RequestMapping("/test") publi ...
- springmvc 数据对象回绑
springmvc中,由页面 post到 controller,对象可以在form里面设置modelAttribute达到回绑的目的. 但是如果对象里面有复杂的非String,int的对象,则要在co ...
- springmvc 接收对象 滴灌摘要
js 对象 该阵列看起来像 我明白http://blog.csdn.net/baicp3/article/details/12752255本文 我们指示样品棒 data3一个js对象.遗嘱java当代 ...
- SpringMVC强大的数据绑定
6.6.2.@RequestParam绑定单个请求参数值 @RequestParam用于将请求参数区数据映射到功能处理方法的参数上. public String requestparam1(@Requ ...
随机推荐
- Java8之使用Optional进行Null处理
Optional类这是Java 8新增的一个类,用以解决程序中常见的NullPointerException异常问题,本篇文章将详细介绍Optional类,以及如何用它消除代码中的null检查. 1. ...
- Git超实用总结,再也不怕记忆力不好了
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 Git 是什么? Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码. Git 仓库主要是 ...
- ThinkPHP+JQuery实现文件的异步上传
前端代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...
- 朱晔的互联网架构实践心得S2E5:浅谈四种API设计风格(RPC、REST、GraphQL、服务端驱动)
Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API设计,项目开发后都会有一份API文档供测试和联调.本文尝试根据自 ...
- nginx 动态添加ssl模块
一.查看nginx模块 /usr/local/nginx/sbin/nginx -V 二.安装openssl包 yum -y install pcre pcre-devel zlib zlib-d ...
- c++入门之初话指针
先上代码:再进行总结知识: # include "iostream" struct ant_year_end { int year; }; int main() { using n ...
- 把玩Alpine linux(二):APK包管理器
导读 Alpine Linux非常精简,开机内存占用也在二三十兆大,没有拆箱即用,就需要我们自己去做一些了解和配置 Alpine Linux的优劣 优势 Alpine Linux的Docker镜像特点 ...
- Feel Good POJ - 2796 (前缀和+单调栈)(详解)
Bill is developing a new mathematical theory for human emotions. His recent investigations are dedic ...
- 修改eclipce操作权限
<dependencies> <dependency> <groupId>jdk.tools</groupId> <artifactId>j ...
- 我的第一个Go web程序 纪念一下
参考Go web编程,很简单的程序: 大致的步骤: 绑定ip和端口 绑定对应的处理器或者处理器函数,有下面两种选择,选择一种即可监听ip及端口 处理器: 定义一个struct结构体 然后让这个结构体实 ...