簡體   English   中英

將 JSON 從 ajax 發布到 Struts2 Action

[英]Posting JSON from ajax to Struts2 Action

嘿,我正在嘗試將 JSON 從 Ajax 發布到 Struts2 操作類方法。 更多信息:我在 WAMP 服務器上運行客戶端,在 Eclipse Tomcat 上運行 Struts2。

我的客戶端代碼:

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
var dataObj = {
"data": [{
    "id": "1",
    "name": "Chris"
}, {
    "id": "2",
    "name": "Kate"
}, {
    "id": "3",
    "name": "Blade"
}, {
    "id": "4",
    "name": "Zack"
}]
};

var data1 = JSON.stringify(dataObj);
$(document).ready(function(){
$("button").click(function(){
$.ajax({url:"http://localhost:8080/Core/add",type: "post", data:  data1, dataType: 'json',      contentType:"application/json;charset=utf-8",async: true,success:function(result){
  $("#div1").html(result);
}});
});
});
</script>
</head>
<body>

<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div>
<button>Get External Content</button>

</body>
</html>  

這是我的 Java 應用程序的東西:

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">



<struts>

       <package name="addMenu" namespace="/" extends="json-default">

      <action name="registrate" class="com.coreRestaurant.menu.MenuAction">
          <result type="json" >
          <param name="root">json</param>
          </result>
      </action>

      <action name="read" class="com.coreRestaurant.menu.MenuAction" method="readMenuById">
          <result type="json" >
          <param name="root">json</param>
          </result>
      </action>

      <action name="add" class="com.coreRestaurant.menu.MenuAction" method="addMenu">
         <result type="json" >
         <param name="root">data</param>
         </result>
      </action>

   </package>

</struts>

這是我的 Java 代碼( MenuAction.java ):

    package com.coreRestaurant.menu;

    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;

    import com.google.gson.Gson;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;

    public class MenuAction extends ActionSupport implements ModelDriven<Menu>, Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Menu menu = new Menu();

    private String json;

    private List<Menu> data = new ArrayList<Menu>();



    public String execute(){
        MenuService menuService = new MenuService();
        setJson(new Gson().toJson(menuService.getMenuNames()));
        if(menuService.isDatabaseConnectionDown()==false){
            return SUCCESS;
        }else{
            setJson(new Gson().toJson("Failed to connect to Database"));
            return ERROR;
        }
    }

    public String readMenuById(){
        MenuService menuService = new MenuService();
        setJson(new Gson().toJson(menuService.getSpecificalMenuNameById(menu.getId())));
        return SUCCESS;

    }

    public String addMenu(){
        MenuService menuService = new MenuService();
        System.out.println(data);
        for(int i=0; i<data.size(); i++){
            System.out.println(data.get(i));
        }
        menu.setName("Postitus");
        menuService.addMenu(menu);
        return SUCCESS;
    }

    public String getJson() {
        return json;
    }


    public void setJson(String json) {
        this.json = json;
    }


    @Override
    public Menu getModel() {
        return menu;
    }

    public List<Menu> getData() {
        System.out.println("Getter Call");
        return data;
    }

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

}

Menu.java本身:

package com.coreRestaurant.menu;

import java.io.Serializable;

public class Menu implements Serializable{


private static final long serialVersionUID = 1L;
private String name;
private int id;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

}

在我運行客戶端代碼時,我只能從 Eclipse 控制台看到以下輸入:

[]
Getter Call

為什么是空的? 我希望從客戶端獲得該 JSON 數組,但沒有成功。

要通過 Ajax 發送 JSON 數據,您需要通過 Struts2 json攔截器對其進行解析。 它還將填充您的操作對象的數據屬性,但您應該從操作類中刪除ModelDriven 除非您定義一個屬性來從模型上的 json 攔截器填充列表數據,否則您不能使用由 json 驅動的模型。 要將json攔截器添加到操作配置中,您可以覆蓋其攔截器。

<action name="add" class="com.coreRestaurant.menu.MenuAction" method="addMenu">
  <interceptor-ref name="json"/>
  <result type="json" >
    <param name="root">data</param>
  </result>
</action>

暫無
暫無

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

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