如何使用AJAX将JSP页面中的JSON数据发送到Struts2中的动作类

时间:2013-10-04 06:48:01

标签: json jquery struts2

我想在jquery中使用ajax将json数据从jsp页面传输到action类。 以下是jquery代码。

$.ajax({
type : 'POST',
url : contextPath+"/postData.action",   
async: false ,
data :json,
dataType:"json", 
contentType: 'application/json; charset=utf-8',
contentType: "application/json",
success : function(result) {
    }
});

Follwing是行动类代码:

private String data;

public String getData() {
    return data;
}

public void setData(String data) {
    this.data = data;
}

@Override
public String execute() 
{
    System.out.println(data);
    return ActionSupport.SUCCESS;
}

Struts.xml配置文件

<action name="postData" class="demo.StoreJSONData" >     
    <result name="success">/jsp/output.jsp</result>

 </action>

示例代码json代码:

{
"rectangle": {
    "0": {
        "id": "rectangle_1",
        "displayData": "<div class=\"\" style=\"background: none repeat scroll 0% 0% rgb(255, 255, 255); width: 389px; height: 129px; position: absolute; left: 92px; top: 360px; border: 1px solid black; z-index: 4;\" id=\"rectangle_1\"></div>"
    }
},
"eclipse": {
    "0": {
        "id": "eclipse_1",
        "displayData": "<div class=\"\" style=\"position: absolute; z-index: 5; background-color: rgb(243, 239, 15); border: 1px solid black; width: 245px; height: 83px; border-radius: 50% 50% 50% 50%; left: 563px; top: 445px;\" id=\"eclipse_1\"></div>"
    }
}
}

3 个答案:

答案 0 :(得分:1)

不确定您想要什么以及要将哪些数据发送到Struts2操作。 这是使用Jquery向Struts2操作发送JSON数据的方法

JQuery的

var arr = { value1: 'value1', value2: 'value2'}; // any size data

$.ajax({
    url: 'action URL',
    type: 'POST',
    data: JSON.stringify(arr),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
    success: function(response) {
        alert(response);
    }
});
  • JSON.stringify方法将java脚本对象转换为JSON字符串,大多数当前浏览器提供此方法开箱即用,但对于旧方法,您可能需要其他方式,如json2.js等。

Struts2已经提供了一个插件来处理和输出JSON数据,请查看json-plugin以获取有关它的更多详细信息。

请记住以下要点

  • 你应该定义你的行动result type="json"并检查你的类路径上是否有json插件,确保你有。

请看下面的问题,它会给你更详细的想法

答案 1 :(得分:0)

我建议你使用更高级别的插件(struts-jquery-plugin)。 它具有Ajax调用支持,这是您正在寻找的。

答案 2 :(得分:0)

嘿问题是你是直接发布对象数组。所以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。