2013-10-24 46 views
6

我从jQuery向struts2 action class发送数据时遇到了问题。 我已经看到了这个问题:JSON Jquery to Struts2 action但我不太了解解决方案。如何使用jQuery将JSON数据发布到Struts2 Action类

这里是我的问题:

JSON数组是这样的:

[{"id":"1","code":"111","name":"ddd"}, 
{"id":"2","code":"222","name":"sss"}, 
{"id":"3","code":"333","name":"eee"}] 

我想JSON数据发送到Struts2的action类。 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数据。将“数据”类型从字符串更改为List<Node>,它再次失败。可能是因为我不太了解Struts2正在使用的OGNL模型。

请帮帮我。非常感谢你!

+0

您使用的是JSON插件吗? –

+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-插件)

<action name="Update" class="Update"> 
     <interceptor-ref name="defaultStack"/> 
     <interceptor-ref name="json"> 
      <param name="enableSMD">true</param> 
     </interceptor-ref> 
</action> 

第4步:在AJAX请求体必要的改变被发送到匹配动作-PARAMS /字段

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

其实你的建议工作!但是我遇到了另一个问题。我可以将数据发送到JSON拦截器。但拦截器会抛出异常,说我输入的格式不正确JSON(无效字符d)。我认为JSON拦截器正在读取我的JSON对象。由于我的JSON数据的第一个字是“数据”,我猜它有问题处理 –

+0

然后我将数据添加到配置文件中以指定根对象。它仍然不能正常工作,报告“无效的根表达:'数据'”。有任何想法吗?非常感谢你! –

+0

请发布正在发送的确切数据。 –

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; 
} 

如果报告是一个Java类中包含的ID,密码,姓名,因为它是用getter和setter方法的成员。

相关问题