前台传过来来好几个对象,后台同时接受这几个相同的javabean: 实践总结
2015-02-11 14:05
141 查看
前台传过来来好几个对象,后台同时接受这几个相同的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对象。
比如
http://blog.csdn.net/zxjcarrot/article/details/37657087
因为项目需要在一个表单里面提交多个对象,比较好的做法就是直接在控制器方法参数里传一个数组。
由于Spring mvc框架在反射生成控制方法的参数对象的时候会调用这个类的getDeclaredConstructor方法来获得构造函数, 但是一直报
NoSuchMethodException的异常 。
根据这个方法的jdk文档,这个类是一个数组对象时,这个方法会抛出java.lang.NoSuchMethodException,因为接口、数组类、void、基本类型没有构造函数。
同事后来给我支了两招,使用ArrayList来代替原生数组,或者使用DTO来封装一下原生的数组,Spring mvc就能够找到这个参数的构造函数了。
前台的话可以通过bars[0].name=xxx 这样的方式来提交表单。
还有一点就是基本类型的数组不需要这样做,因为不需要构造函数。
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 这样的方式来提交表单。
还有一点就是基本类型的数组不需要这样做,因为不需要构造函数。
相关文章推荐
- Java将前台Ajax传过来的对象转成后台对象
- java两个相同Bean对象复制
- 前台如何将多个json对象传入java后台
- 前台如何将多个json对象传入java后台(转)
- angularjs 前台复杂的json串传到后台接受(简单)总结
- java前台向后台传对象
- ext 4.1关于一个对象下面有几个对象,前台新建后发生后台的解决办法。
- Java后台如何接收并处理前台传过来的json格式的数组参数
- Jackson 后台将javabean对象、List转为json格式字符串并返回,同时前台解析
- 如何在前台获取后台的对象bean以及其中的值
- Java后台如何接收并处理前台传过来的json格式的数组参数
- 前台js对象转后台java对象
- json数据与JAVA数据的转换 jsonJavaBean.netApache 自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:Data T
- 重拾java基础(十一):Eclipse和bean对象三大常用方法总结
- xmlbeans-2.5.0 生成与xml结构相同的javabean对象
- 前台js对象在后台转化java对象的问题探讨
- 将前台json对象传入java后台
- 将前台json对象传入java后台
- 05.Java后台如何接收并处理前台传过来的json格式的数组参数
- java前台往后台传递list,后台如何接受