7

我在将数据从 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 模型。

请帮我。非常感谢!

4

2 回答 2

9
{"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 请求正文中进行必要的更改以匹配操作参数/字段

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!");
  }
});

上面的代码未经测试。

于 2013-10-27T20:39:41.297 回答
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 的成员。

于 2014-05-11T15:30:42.823 回答