• 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

  • 相关阅读:
    Postman使用教程
    CAD和ArcGIS转换 矢量配准
    SAP CRM Advanced search和Simple search里Max hit表现行为的差异
    SAP CRM Product simple search的启用步骤
    如何快速定位SAP CRM订单应用(Order Application)错误消息抛出的准确位置
    如何动态修改SAP CRM WebClient UI表格栏的宽度
    如何在SAP CRM WebClient UI里创建web service并使用ABAP消费
    如何处理SAP CRM Web Service错误
    如何使用SAP CRM WebClient UI实现一个类似新浪微博的字数统计器
    如何开启SAP CRM基于WORD模板创建附件的功能
  • 原文地址:https://www.cnblogs.com/nihaorz/p/6727769.html
Copyright © 2020-2023  润新知