前台传过来来好几个对象,后台同时接受这几个相同的javabean: 实践总结

前台传过来来好几个对象,后台同时接受这几个相同的javabean:  实践总结

public class CustRelList implements Serializable{

    private static final long serialVersionUID = -3136283009353087352L;
    private CustRel[] custRelLst;
    public CustRel[] getCustRelLst() {
        return custRelLst;
    }
    public void setCustRelLst(CustRel[] custRelLst) {
        this.custRelLst = custRelLst;
    }

}

前台:

<input type="hidden" id="relCustName1"   name="custRelLst[0].relCustName" value=""/>
             <input type="hidden" id="relCustSex1"   name="custRelLst[0].relCustSex" value=""/>
             <input type="hidden" id="relCustMobile1"   name="custRelLst[0].relCustMobile" value=""/>
             <input type="hidden" id="relCustWorkAddr1"   name="custRelLst[0].relCustWorkAddr" value=""/>
             <input type="hidden" id="relType1"   name="custRelLst[0].relType" value=""/>
            
             <input type="hidden" id="relCustName2"   name="custRelLst[1].relCustName" value=""/>
             <input type="hidden" id="relCustSex2"   name="custRelLst[1].relCustSex" value=""/>
             <input type="hidden" id="relCustMobile2"   name="custRelLst[1].relCustMobile" value=""/>
             <input type="hidden" id="relCustWorkAddr2"   name="custRelLst[1].relCustWorkAddr" value=""/>
             <input type="hidden" id="relType2"   name="custRelLst[1].relType" value=""/>
            
             <input type="hidden" id="relCustName3"   name="custRelLst[2].relCustName" value=""/>
             <input type="hidden" id="relCustSex3"   name="custRelLst[2].relCustSex" value=""/>
             <input type="hidden" id="relCustMobile3"   name="custRelLst[2].relCustMobile" value=""/>
             <input type="hidden" id="relCustWorkAddr3"   name="custRelLst[2].relCustWorkAddr" value=""/>
             <input type="hidden" id="relType3"   name="custRelLst[2].relType" value=""/>

注意:custRelLst[1]是CustRelList类中属性的名字;容易错误;

下面是查的资料::::


比如你要接收一个Bank类型的数组,那么先建一个类

class BankArray{
    private Bank banks[] ;

    public void setBanks(Bank[] banks) {
this.banks = banks;
    }

    public Bank[] getBanks() {
 return banks;
    }
}

//用 BankArray  作参数
@RequestMapping(value ="xxx" , method = RequestMethod.POST)
public ModelAndView doLogOut(BankArray param){  }

/* 页面用下面的方式 */
<input name="banks[0].name" value="name1" />
<input name="banks[0].address" value="address1" />

<input name="banks[1].name" value="name2" />
<input name="banks[1].address" value="address2" />

<input name="banks[2].name" value="name3" />

<input name="banks[2].address" value="address3" />




spring mvc 不能直接接收数组list参数,  必需把这个数组或list作为一个对象的属性接收, 如对象 A a; 有个list属性b然后页面可以通过b[0].name、b[0].xxx、b[1].xxx传值。 控制层方法参数必需是对象a;
------解决方案--------------------

本帖最后由 fangmingshijie 于 2014-08-01 09:47:23 编辑
spring提供简单的对象绑定,当然支持集合对象绑定了。不过你要定义一个对象,属性有一个集合,集合里存放Person对象。
比如

public class PersonList {  

	  

    private List<Person> person;  

  

    public List<Person> getPerson() {  

        return person;  

    }  

  

    public void setPerson(List<Person> person) {  

        this.Person= person;  

    }  

  

}  





controller里:

@RequestMapping(value = "xxx", method = RequestMethod.POST)

	public void test(PersonList person) {

		//遍历person 

	    }  		



页面要这样写:

<form id="form" action="test/test.do" method="post">

<input type="text" name="person[0].username" value="jobs"/>

<input type="text" name="person[0].age" value="55"/><br/>

<input type="text" name="person[1].username]" value="jim"/>

<input type="text" name="person[1].age" value="21"/><br/>

<input type="submit">

<form>



  http://blog.csdn.net/zxjcarrot/article/details/37657087

因为项目需要在一个表单里面提交多个对象,比较好的做法就是直接在控制器方法参数里传一个数组。

由于Spring mvc框架在反射生成控制方法的参数对象的时候会调用这个类的getDeclaredConstructor方法来获得构造函数, 但是一直报 NoSuchMethodException的异常 。

根据这个方法的jdk文档,这个类是一个数组对象时,这个方法会抛出java.lang.NoSuchMethodException,因为接口、数组类、void、基本类型没有构造函数。

同事后来给我支了两招,使用ArrayList来代替原生数组,或者使用DTO来封装一下原生的数组,Spring mvc就能够找到这个参数的构造函数了。

@RequestMapping(value={"xxx"}, method = RequestMethod.POST)
public String foo(ArrayList<Bar> bars){
  param.get(0);
}
class BarArray{
  Bar[] bars;
  public Bar[] getBars(){
    return bars;
  }
  public void setBars(Bar[] bars){
    this.bars = bars;
  }
}
@RequestMapping(value={"xxx"}, method = RequestMethod.POST)
public String foo(ArrayList<Bar> bars){
  param.get(0);
}

前台的话可以通过bars[0].name=xxx 这样的方式来提交表单。

还有一点就是基本类型的数组不需要这样做,因为不需要构造函数。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值