我在将数据从jQuery发送到struts2动作类时遇到了问题。 我已经看到了这个问题:JSON Jquery to Struts2 action但我不太了解解决方案。
这是我的问题:
json数组是这样的:
[{"id":"1","code":"111","name":"ddd"},
{"id":"2","code":"222","name":"sss"},
{"id":"3","code":"333","name":"eee"}]
我想将json数据发送到struts2动作类。 jQuery代码是这样的:
var data = JSON.stringify(dataObj);
$.ajax({
url: "Update",
type: "post",
data: data,
dataType: 'json',
contentType:"application/json;charset=utf-8",
success : function(){
alert("You made it!");
}
});
但是,在Chrome的开发工具中,我看到了提交到服务器端的数据。但是在服务器端,我不知道如何接收json数据。
动作:
public class Update extends ActionSupport{
private String data;
public String getData(){
return data;
}
public void setData(String data){
this.data= data;
}
public String execute(){
System.out.println(data);
return SUCCESS;
}
}
通过这种方式,data
为空。
我还尝试使用List来接收JSON数据。将“数据”类型从String更改为List<Node>
,它再次失败。可能是因为我不太了解Struts2正在使用的OGNL模型。
请帮助我。非常感谢你!
答案 0 :(得分:8)
{"id":"1","code":"111","name":"ddd"}
第1步:创建一个bean / pojo来累积/封装上述字段
class MyBean{
String id,code,name;
//getters & setters
}
第2步:更改您的操作代码以接收MyBeans列表
public class Update extends ActionSupport{
private List<MyBean> data;
//other code, getters & setters
}
步骤3:配置您的操作以反序列化JSON数据并填充操作字段(使用json-plugin)
<action name="Update" class="Update">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="json">
<param name="enableSMD">true</param>
</interceptor-ref>
</action>
第4步:在发送的ajax请求正文中进行必要的更改以匹配action-params / fields
var data = JSON.stringify(dataObj);
$.ajax({
url: "Update",
type: "post",
data: "data:"+data,
dataType: 'json',
contentType:"application/json;charset=utf-8",
success : function(){
alert("You made it!");
}
});
以上代码未经测试。
答案 1 :(得分:1)
嘿问题是你是直接发布对象数组。所以Struts2不知道要打电话的方法。像下面这样更改你的json数据。然后它会工作。
{"data":[{"id":"1","code":"111","name":"ddd"},
"id":"2","code":"222","name":"sss"},
{"id":"3","code":"333","name":"eee"}]}
然后在setter中读取对象
public void setData(List < Report > data) {
System.out.println("Setter Call Flow");
this.data = data;
}
Report是一个java类包含id,code,name,因为它的成员有setter和getter。