从我的JS文件中,我发布了这个JSON数据。
myPayload[0].id=1&myPayload[0].name=Me&myPayload[0].pId=2&myPayload[0].pName=Dad
YUI代码:
var formElements = YAHOO.util.Connect.setForm("myFormId");
alert("New form elements:" + formElements); // Alerting POST data as shown above
YAHOO.util.Connect.resetFormState();
YAHOO.util.Connect.asyncRequest("POST", "/mycontroller/save", {
cache : false,
success : function(res) {
alert(res.responseText);
},
failure : function(res) {
alert(res.responseText);
}
}, formElements);
控制器代码:
@RequestMapping(value = "/save", method=RequestMethod.POST)
@ResponseBody
public String saveData(ModelMap mm, @ModelAttribute("myPayload") MyBean bean, BindingResult errors) {
log.info("save:Called");
List<MyDTO> lst = bean.getList();
log.info("save:Number of records:" + lst.size());
return "Successfully Updated.";
}
Bean代码:
public class MyBean {
private List<MyDTO> myPayload = new AutoPopulatingList<MyDTO>(MyDTO.class);
public List<MyDTO> getList() {
return myPayload;
}
public void setList(List<MyDTO> mList) {
this.myPayload = mList;
}
}
该列表仍为空。 bean值也是空的。 我在这做错了什么?
答案 0 :(得分:0)
嗯......这有用吗?
在
等表单中添加modelAttribute="contactForm"
< form:form method="post" action="your url" modelAttribute="myPayload" >
或使用@RequestBody
:
@RequestMapping(value = "/save", method=RequestMethod.POST)
@ResponseBody
public String saveData(ModelMap mm, @RequestBody MyBean bean, BindingResult errors) {
顺便说一下,yui(我不熟悉js)可以将myPayload[0].id=1&myPayload[0].name=Me&myPayload[0].pId=2&myPayload[0].pName=Dad
变为JSON吗?毕竟它不像普通的JSON。
<强>更新强>
@ModelAttribute
解决方案:
将所有myPayload[x].foo=bar
更改为list[x].foo=bar
(如果列表是MyBean中的字段名称),并将modelAttribute="myPayload"
保留在表单标记中。
@RequestBody
解决方案:
如果您使用@RequestBody
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.12</version>
</dependency>