@InitBinder注解 解决form表单向springmvc传递多个对象参数

来源:互联网 发布:中国人民航空大学知乎 编辑:程序博客网 时间:2024/05/21 06:47

需求:有如下一个表单,包含两个对象的属性,name以“对象名.属性名”命名,传到后台。

<form class="form-horizontal" role="form" action="updateCompanyResult.do" method="post">  <div class="alert alert-success" role="alert">    <strong>公司信息 —— </strong>基本信息  </div>  <div class="form-group">    <label for="firstname" class="col-sm-2 control-label">公司中文全称</label>    <div class="col-sm-10">      <input type="text" class="form-control" placeholder="请输入公司中文全称" value="${company.companyInfoBase.gszwqc}" name="companyInfoBase.gszwqc">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">英文名称及缩写</label>    <div class="col-sm-10">      <input type="text" class="form-control" placeholder="请输入英文名称及缩写" value="${company.companyInfoBase.ywmcjsx}" name="companyInfoBase.ywmcjsx">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">证券简称</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.zqjc}" name="companyInfoBase.zqjc">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">证券代码</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.zqdm}" name="companyInfoBase.zqdm">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">法定代表人</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.fddlr}" name="companyInfoBase.fddlr">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">注册地址</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.zcdz}" name="companyInfoBase.zcdz">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">办公地址</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.bgdz}" name="companyInfoBase.bgdz">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">会计师事务所</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.kjssws}" name="companyInfoBase.kjssws">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">签字注册会计师姓名</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.qzzckjsxm}" name="companyInfoBase.qzzckjsxm">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">会计师事务所办公地址</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoBase.kjsswsbgdz}" name="companyInfoBase.kjsswsbgdz">    </div>  </div>  <div class="alert alert-success" role="alert">    <strong>公司信息 —— </strong>联系方式  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">董事会秘书或信息披露负责人</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.dshmshxxplfzr}" name="companyInfoContact.dshmshxxplfzr">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">电话</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.tel}" name="companyInfoContact.tel">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">传真</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.fax}" name="companyInfoContact.fax">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">电子邮箱</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.email}" name="companyInfoContact.email">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">公司网址</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.url}" name="companyInfoContact.url">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">联系地址及邮政编码</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.lxdzjyzbm}" name="companyInfoContact.lxdzjyzbm">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">公司指定信息披露平台的网址</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.gszdxxplptdwz}" name="companyInfoContact.gszdxxplptdwz">    </div>  </div>  <div class="form-group">    <label for="lastname" class="col-sm-2 control-label">公司年度报告备置地</label>    <div class="col-sm-10">      <input type="text" class="form-control" value="${company.companyInfoContact.gsndbgbzd}" name="companyInfoContact.gsndbgbzd">    </div>  </div>  <div class="form-group">    <div class="col-sm-offset-2 col-sm-10">      <button type="submit" class="btn btn-primary">保存</button>    </div>  </div></form>

直接使用对象接收是接收不到值的。需要加入如下代码

    // 绑定变量名字和属性,参数封装进类      @InitBinder("companyInfoBase")      public void initBinderUser(WebDataBinder binder) {          binder.setFieldDefaultPrefix("companyInfoBase.");      }      // 绑定变量名字和属性,参数封装进类      @InitBinder("companyInfoContact")      public void initBinderAddr(WebDataBinder binder) {          binder.setFieldDefaultPrefix("companyInfoContact.");      }  

controller方法体:

    @RequestMapping("updateCompanyResult.do")    public ModelAndView updateCompanyResult(@ModelAttribute CompanyInfoBase companyInfoBase,@ModelAttribute CompanyInfoContact  companyInfoContact,ModelAndView model){        model.setViewName("jsps/pdf/companyResult");        return model;      }
原创粉丝点击