场景: - 我有一个jsp(比如A),其中我包含了更多的jsps(比如P,Q,R,S)。在P,Q,R和S中,我分别创建了一个表单。在点击主保存按钮时,我发送一个ajax请求,我在序列化所有4种形式(jsps P,Q,R,S),然后在ajax的数据中发送此序列化内容。在控制器上,我正在我的对象中检索这个序列化的表单内容,如p,q,r,s。
实际问题: - 在所有4个表单中,我有一个单独的commandName,但在每个表单中,我维护一个名为“id”的隐藏输入元素。在从控制台看到firebug中的ajax请求时,所有id都被正确地发布(因为它们分别是P,Q,R,S形式分别为1101,1102,1103,1104)但是当它到达我的控制器时所有对象(p,q,r,s)中包含的id是相同的(P,Q,R和S为1101)。找不到原因。任何帮助表示赞赏..
<form:form id="A" commandName="objectA">
<input type="hidden" name="id" value="1101" />
</form:form>
<form:form id="B" commandName="objectB">
<input type="hidden" name="id" value="1102" />
</form:form>
<form:form id="C" commandName="objectC">
<input type="hidden" name="id" value="1103" />
</form:form>
<form:form id="D" commandName="objectD">
<input type="hidden" name="id" value="1104" />
</form:form>
然后在我的ajax请求中,我将数据发送为
url : "myController/myRequestMapping",
data : $("#A").serialize()+"&"
+$("#B").serialize()+"&"
+$("#C").serialize()+"&"
+$("#D").serialize(),
在控制器上我有这个:
@RequestMapping(value="/myRequestMapping")
public void myFunction(AClass a,BClass b,CClass c,DClass d){
System.out.println("A's ID is:"+a.getId()); //Prints 1101
System.out.println("B's ID is:"+b.getId()); //Prints 1101 instead of 1102
System.out.println("C's ID is:"+c.getId()); //Prints 1101 instead of 1103
System.out.println("D's ID is:"+d.getId()); //Prints 1101 instead of 1104
}
答案 0 :(得分:4)
试试这个:
如果所有表单都具有相同的输入元素,则创建一个dto类,如:
public class Form {
private Long id;
public Form(){}
//getters and setters
}
和AllForms
类来保存所有Form
个实例,例如:
public class AllForms extends ArrayList<Form> {}
然后在js中创建所有表单内容的数组:
var myarray = [
{id: $('#A').find('input[name="id"]').val()},
{id: $('#B').find('input[name="id"]').val()},
{id: $('#C').find('input[name="id"]').val()},
{id: $('#D').find('input[name="id"]').val()}
];
var jsonStr = JSON.stringify(myarray);
然后在AJAX请求中做:
url : "myController/myRequestMapping",
data : jsonStr
控制器中的如:
@RequestMapping(value="//myController/myRequestMapping", method=RequestMethod.POST)
public @ResponseBody AllForms process(@RequestBody AllForms allForms){
System.out.println(allForms);
return allForms;
}
或者替代方案是:
JS POST喜欢:
$.post("myController/myRequestMapping",{jsonStr : jsonStr},function(e) {
console.log('success: '+e);
}, "json");
和处理程序方法如:
@RequestMapping(value="/myController/myRequestMapping", method=RequestMethod.POST)
public @ResponseBody String process(@RequestParam String jsonStr){
System.out.println(jsonStr);
//convert here Form instance from jsonStr
return jsonStr;
}