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

本文介绍了一种在Java Web应用中处理复杂表单数据的方法。通过使用Spring MVC框架中的@InitBinder注解来绑定表单字段与实体类属性,确保从前端传来的数据能正确映射到后端实体类中,简化了数据处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:有如下一个表单,包含两个对象的属性,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;  
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值