簡體   English   中英

如何使用jQuery將JSON數據發布到Struts2 Action類

[英]How to use jQuery to post JSON data to a Struts2 Action class

我在將數據從jQuery發送到struts2動作類時遇到了問題。 我已經看到了問題: JSON Jquery對Struts2的操作,但我不太了解解決方案。

這是我的問題:

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數據。 將“data”類型從String更改為List<Node> ,它再次失敗。 可能是因為我不太了解Struts2正在使用的OGNL模型。

請幫我。 非常感謝你!

{"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請求體中進行必要的更改以匹配action-params / fields

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

以上代碼未經測試。

嘿問題是你是直接發布對象數組。 所以Struts2不知道要調用的whicch方法。 像下面這樣更改你的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是一個java類包含id,code,name,因為它是setters和getters的成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM