如何使用 jQuery 将 JSON 数据发布到 Struts2 Action 类

Posted

技术标签:

【中文标题】如何使用 jQuery 将 JSON 数据发布到 Struts2 Action 类【英文标题】:How to use jQuery to post JSON data to a Struts2 Action class 【发布时间】:2013-11-03 04:56:18 【问题描述】:

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

请帮助我。非常感谢!

【问题讨论】:

你在使用 JSON 插件吗? 是的,但我对插件不熟悉。 【参考方案1】:

嘿问题是您直接发布对象数组。所以 Struts2 不知道调用哪个方法。更改您的 json 数据,如下所示。然后就可以了。

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

然后在setter里面用object读取

public void setData(List < Report > data) 
    System.out.println("Setter Call Flow");
    this.data = data;

其中 Report 是一个包含 id、code、name 的 java 类,因为它是具有 setter 和 getter 的成员。

【讨论】:

【参考方案2】:
"id":"1","code":"111","name":"ddd"

第一步:创建一个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!");
  
);

以上代码未经测试。

【讨论】:

其实你的建议是有效的!但是我遇到了另一个问题。我可以将数据发送到 JSON 拦截器。但是拦截器抛出异常,说我的输入不是格式正确的 JSON(无效的 char d)。我认为 JSON 拦截器正在读取我的 JSON 对象。由于我的 JSON 数据的第一个词是“数据”,我想它在处理过程中遇到了问题 然后我将 data 添加到配置文件中以指定根对象。它仍然无法正常工作,报告“无效的根表达式:'数据'。”有任何想法吗?非常感谢! 请发布正在发送的确切数据。

以上是关于如何使用 jQuery 将 JSON 数据发布到 Struts2 Action 类的主要内容,如果未能解决你的问题,请参考以下文章

如何将json返回的数据绑定到asp.net中的jquery gridview?

将 JSON 发送到服务器并返回 JSON,无需 JQuery

如何将 JSON 对象从 Python 脚本发送到 jQuery?

如何将json返回的数据绑定到asp.net中的jquery gridview?

如何将动态json加载到jquery数据表

如何将 JSON 对象内的 JSON 数组传递给 jQuery 自动完成