将 JSON 从 ajax 发布到 Struts2 Action

2023-11-29

嘿,我正在尝试将 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;
    }

}

And the Menu.java itself:

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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JSON 从 ajax 发布到 Struts2 Action 的相关文章

随机推荐

  • 如何在 Ruby on Rails 3 中使用 Phonegap

    我正在使用 ruby on Rails 3 制作一个移动网络应用程序 我怎样才能最好地使用phonegap 有什么建议么 该网络应用程序将以本机方式呈现给客户端 应用程序由谷歌地图 API v3 组成 除了带有谷歌地图的 V gt html
  • Phonegap存储本地数据库

    我的应用程序中有大量数据 我需要它 以防应用程序离线运行 目前我将它放在 data js 文件中并使用jQuery 数据功能来管理它 像这样的行有1800行 总共约 500kb data db Aarstra e 34236 1 34246
  • UIWebView 同时显示本地图像和 Facebook 评论

    我在 UIWebView 上遇到问题 我有一个显示 html 字符串的 WebView 该 html 字符串包含 网页文本 本地图片 脸书 评论 起初我只有 Html 本地图像 所以我使用了众所周知的方法 NSString path NSB
  • 有没有办法从 CXF 内的 JAX-RS REST 资源访问 CXF 消息交换?

    目前我们有一个使用 CXF 2 4 2 的 RESTful API 在我的一种资源方法中 我想处理一些查询参数并将结果存储在 CXF 消息交换中 以供输出拦截器稍后使用 我已经尝试注入 WebServiceContext 如前所述here
  • 如何在 React Bootstrap Table 中添加水平滚动条?

    我正在使用 React Bootstrap Table 我只想将水平滚动条添加到最后两列 最后两列应包装在可滚动容器中 我们如何实现这一点 const columns dataField id text Product ID dataFie
  • 查找表中每行的顶级父级 [SQL Server 2008]

    我有以下两张表 表人 Id Name 1 A 2 B 3 C 4 D 5 E 表关系层次结构 ParentId CHildId 2 1 3 2 4 3 这将形成一个树状结构 D C B A ParentId 和 ChildId 是 Pers
  • 有没有一种方便的方法可以在 Swing JTable 中使用微调器作为编辑器?

    我处理的数字数据通常会向上或向下编辑 0 01 Value of variable 因此与通常的文本单元格相比 微调器看起来是一个不错的选择 我看过 DefaultCellEditor 但它只接受文本字段 组合框或复选框 有没有方便的方法来
  • 两个已知的 Android 地理位置之间的角度

    我想找到两个已知地理位置之间的角度 基本上我想要的是 我想引导一个箭头 其尾点位于我当前的位置 箭头指向固定的地理位置 所以我在想 如果以某种方式 我能够在这两个地理位置之间获得一个角度 那么我可能也能做同样的事情 你们有什么建议可以更好地
  • Python 和 sqlite3 抛出错误:sqlite3.OperationalError:靠近“s”:语法错误

    我正在尝试使用 Python 和 BeautifulSoup 来抓取一些网络信息 迭代它 然后将一些片段插入 sqlite3 数据库中 但我不断出现这个错误 TBTscrape 中的文件 Users Chris Desktop BS4 TB
  • Azure:跨多个资源组共享资源

    是否可以在多个资源组之间共享特定资源 在我的例子中是 redis 缓存 资源组只是逻辑容器 资源位于哪个资源组中并不重要 您可以使用任何资源组中的资源 Example 假设您在 RG1 中创建应用服务计划 并在 RG2 中创建 Web 应用
  • Swift 3 中是否可以在不自动布局的情况下降低键盘的高度?

    我需要以编程方式降低键盘的高度 我有什么办法可以做到吗 我发现我们可以使用键盘扩展来降低高度 但我尝试过 但它对我不起作用 我有什么办法可以做到这一点吗 Edit But i can see small keyboards in some
  • 如何替换字符串的某些部分?

    如何用另一部分替换字符串的某一部分 输入字符串 Hello my name is Santa 我怎样才能改变一切a在我的字符串中还有其他东西吗 我想我需要一个foreach循环 但我不确定如何使用它 strtr str array a gt
  • java下载文件时如何检测网络断开?

    我正在使用以下代码使用 Java 下载文件 但我想检测连接何时丢失 我运行了以下代码 在下载过程中我故意断开了互联网连接 但没有引发异常并且挂起 即使打开连接后也没有任何反应 于是 它就永远挂了 没有任何例外 有没有办法让它在连接丢失时抛出
  • 我可以仅在底部椭圆化剪贴蒙版吗?

    我正在尝试在 CSS 中的图像上创建弯曲的剪贴蒙版 该曲线本质上只是一个非常宽的椭圆的下半部分 要求是角度 曲率不会根据图像的高度 宽度而改变 它应该始终保持一致 这是一个视觉效果 尝试1 边框半径 溢出隐藏 固定宽度 问题 图像高度影响曲
  • 为什么“cut”反对我的标签?

    我试图根据值所属的范围来标记值 就像你对作业评分一样 因此 如果我有一个平均测验分数的数据框和一个数值数据框 我将其用作为这些平均值分配分数的下限 grades lt read table text Student Mean Adam 94
  • 私人运营商删除[重复]

    这个问题在这里已经有答案了 可能的重复 公共运算符 new 私有运算符删除 使用 new 时出现 C2248 无法访问私有成员 http efesx com 2009 12 01 public operator new and privat
  • jQuery addClass 方法链接以执行 CSS 转换

    我想做的事 broke div div
  • 通过java App查看PDF

    我想知道如何通过 Java 应用程序查看 PDF 我正在尝试创建一个应用程序来使用 NetBeans 6 8 查看 PDF 很少有 pdf 阅读器库 例如 iText pdfBox 但他们没有帮助我 请帮我 任何帮助都是感激的 谢谢你 这里
  • Spring集成:使用oubound网关处理http错误

    如何处理 http 出站网关中的异常 当我收到状态代码 500 或 400 时 会显示异常 那么我应该如何使用 spring 集成来处理 http 错误 我的配置是这样的
  • 将 JSON 从 ajax 发布到 Struts2 Action

    嘿 我正在尝试将 JSON 从 Ajax 发布到 Struts2 操作类方法 更多信息 我在 WAMP 服务器上运行客户端 在 Eclipse Tomcat 上运行 Struts2 我的客户端代码