最近在做着一个Java Web的项目,而项目中前端使用了Ext-js 4,而MVC框架则是Spring MVC。
有一个功能是这样的,后端定义了一个参数是手动定义的对象(下文用A表示该对象),A中含有一个属性为List<ObjectB>。
一开始我在前端的写法如下:
var para = {};
para.p1 = 'a';
para.p2 = 'b';
var bList = [];
var b = {};
for ( i = 0; i < testList.length; i ++){
b.p1 = testList[i].p1;
b.p2 = testList[i].p2;
bList[i] = b;
}
para.bList = bList;
结果就报400错误了,bad request,传入的参数不正确。
后来问了同事,才发现原来不能这样组织参数的。写法如下:
var para = {};
para['p1'] = 'a';
for ( i = 0; i < testList.length; i++) {
para['bList[' + i +'].p1'] = testList[i].p1;
}
备注:
当直接使用表单提交List参数时,可将form中的标签中指定同一个name即可,一般用于复选框,不能将name写成数组形式的值。
例:提交城市,后台定义成List<String> cities;,前台只需要在form中定义n个含name=cities的标签,而非name=cities[0],name=cities[1]等。
若使用js来构造该参数,后台可使用数组,如:String[] cities,前端js则需要这样传:cities=["t", "s"]
若有错误,还望指正,O(∩_∩)O谢谢!