将serialize数组传递给struts2动作

时间:2016-02-25 18:49:13

标签: java jquery json struts2 struts2-jquery

我计划将整个表单数据以JSON格式发布到Struts2 Action。以下是我的代码片段。纠正我出错的地方或帮助我,以便我可以正确地获取Action文件中的所有值。我在Action文件中的所有SOP都显示为null

var MyForm = $("#companyform").serializeArray();
   var data = JSON.stringify(MyForm);


   $.ajax({
       type: 'POST',
       url:'createcompany.action?jsonRequestdata='+data,
       dataType: 'json',
       success: function(data){
             console.log(stringify(data));
        }});

我的表单数据已变为[{"name":"tan","value":"rrr"},{"name":"pan","value":"adf"},{"name":"tod","value":"1"}]

Struts2操作文件:

String jsonRequestdata;
public String execute() throws Exception {
    JSONArray jsonArr = (JSONArray) new JSONParser().parse(jsonRequestdata);
    JSONObject json = (JSONObject) jsonArr.get(0);


    System.out.println("TAN=" + json.get("tan"));
    System.out.println("PAN=" + json.get("pan"));
    System.out.println("TOD=" + json.get("tod"));
    return "success";
}

目前的输出

TAN=null
PAN=null
TOD=null

2 个答案:

答案 0 :(得分:0)

要使用POST请求发送数据,您应该使用data这样的属性

$.ajax({
   type: 'POST',
   url:'createcompany.action'
   data: 'jsonRequestdata='+data
   dataType: 'json',
   success: function(data){
      console.log(JSON.stringify(data.jsonRequestdata));
   }
});

要获取操作bean中的数据,您需要使用public setter

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

要将数据返回到success回调函数,请使用public getter

public String getJsonRequestdata(){ return this.jsonRequestdata; } 

要从操作中返回JSON,请使用结果类型json

<result type="json"><param name="includeProperties">jsonRequestdata</param></result>

注意,如果将json拦截器添加到操作配置中,则可以在请求中使用JSON数据。在请求中使用Content-Type: "application/json"将触发Struts2解析请求并自动将其反序列化为操作bean。

答案 1 :(得分:0)

由于我使用名称,因此我必须使用名称来获取它。以下是工作代码

JSONArray jsonArr = (JSONArray) new JSONParser().parse(jsonRequestdata);

    for(int i=0;i<jsonArr.size();i++){
            JSONObject json=(JSONObject) jsonArr.get(i);   
            System.out.println("name=" + json.get("name"));
            System.out.println("value=" + json.get("value"));
    }