【问题标题】:How to send Json to Struts2? [duplicate]如何将 Json 发送到 Struts2? [复制]
【发布时间】:2017-04-04 19:48:47
【问题描述】:

struts2中有一个Json对象,不知道怎么获取,里面有两个数组,java中怎么传给ArrayList?

var params = {
        'goodsIdList':goodsIdList,
        'goodsCountList':goodsCountList
    }
    console.log(params);
    $.ajax({
        type: 'post',
        url: "checkGoodsIsEnough",
        data: params,
        dataType:"json",
        async: true,
        success: alert("success"),
        error: function (jqXHR) {
            alert(jqXHR.status);
        }

    })

【问题讨论】:

  • 这里是一个例子:struts2 and json example
  • 我想知道如何在struts2中获取由ajax发送的json对象,而不是通过struts将json对象发送到ajax

标签: javascript java json jsp struts2


【解决方案1】:

我假设您已经将此配置添加到您的 struts.xml 以提供 JSON 格式支持:

<action name="checkGoodsIsEnough" class="ClassOf_CheckGoodsIsEnough">
        <interceptor-ref name="defaultStack"/>
         <interceptor-ref name="json">
            <param name="enableSMD">true</param>
        </interceptor-ref>
</action>

如果是这种情况,请不要忘记使用以下方法将您的 javascript 对象转换为 JSON 字符串格式:

var JsonParams = JSON.stringify(params);

然后尝试如下进行 Post 调用:

$.ajax({
    type: 'post',
    url: "checkGoodsIsEnough",
    data: JsonParams,
    dataType:"json",
    async: true,
    success: alert("success"),
    error: function (jqXHR) {
        alert(jqXHR.status);
    }

});

希望对您有所帮助!

【讨论】:

  • 你的回答对我有帮助。json对象是对的,但是如何在struts2中获取呢?
  • 必须避免实现“ModelDriven”接口,并定义
  • 并为请求中的每个参数定义“attribute”、“setter”和“getter”。
  • 这是一个完整的示例,说明您必须执行的操作:tech.learnerandtutor.com/…
【解决方案2】:

您需要struts2-json-plugin

它有两个主要目的:

#1 - 通过 json 结果Java 对象转为 JSON(从 Action 转为 JSP );

#2 - 通过json拦截器Javascript对象转为JSON(从JSP转为Action )。

虽然第一个是自动的,但对于第二个(这就是您想要的),您需要定义一个包含 json 拦截器的拦截器堆栈,例如:

<package name="myPackage" extends="json-default">
...
    <action name="myAction" class="foo.bar.MyAction">

        <interceptor-ref name="json"         /> <!-- #2 is here -->
        <interceptor-ref name="defaultStack" />

        <result name="success" type="json"> <!-- #1 is here -->
            <param name="root">myJavaObjectThatWillBecomeJson</param>
        </result>
        <result name="error">error.jsp</result>
    </action>
    ...

确认它工作正常后,您可以(并且应该)在配置中定义一次拦截器堆栈,将其设置为默认拦截器,而不是在每个操作中重写此配置。

要让json Interceptor正常运行,条件是:

  • content-type”必须是“application/json
  • JSON 内容必须格式正确,语法见json.org
  • 对于必须填充的字段,操作必须具有公共“setter”方法。
  • 支持的填充类型有:基元 (int,long...String)、日期、列表、地图、基元数组、其他类 (稍后会详细介绍)和其他类的数组。
  • JSON 中要填充到列表或映射中的任何对象都将是 Map 类型(从属性映射到值),任何 整数将是 Long 类型,任何十进制数都将是类型 Double 和任何 List 类型的数组。

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 2014-12-27
    • 2016-09-07
    • 2019-04-06
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多