【问题标题】:JSON serialization (using Jquery plugin) w/ Struts2 interceptors -带有 Struts2 拦截器的 JSON 序列化(使用 Jquery 插件) -
【发布时间】:2010-12-15 07:31:41
【问题描述】:

我正在尝试实现http://code.google.com/p/struts2-jquery/wiki/SelectTag#A_simple_Doubleselect_with_Topics,但我似乎无法成功地将 json 拦截器与其他拦截器结合起来。

在我的 struts.xml 中:

<package name="admin" namespace="/admin" extends="struts-default,json-default">
    <action name="LoadLists" method="loadLists" class="test.JSONAction">
        <interceptor-ref name="json">
            <param name="contentType">application/json</param>
            <!--interceptor added to override this property below-->
            <param name="excludeNullProperties">true</param> 
        </interceptor-ref>
        <result name="success" type="json"/>
        <interceptor-ref name="servletConfig"/>
    </action>
</package>

这是一些动作类代码。

请注意,我需要 session 变量,因此在上面添加了 &lt;interceptor-ref name="servletConfig"/&gt; 行来设置会话变量,以便可以在以下 Java 代码中使用它:

public String loadLists() {
    items = (List<String>) session.get("itemsList");
    if (itemSelected.equals...
    // Do stuff to process the list and generate the second list...            
}

public void setItemSelected(String itemSelected) {
    this.itemSelected = itemSelected;
}

但是当我有&lt;interceptor-ref name="servletConfig"/&gt; 时,错误日志显示:

org.apache.struts2.json.JSONInterceptor.debug:68 - Content type must be 'application/json' or 'application/json-rpc'. Ignoring request with content type application/x-www-form-urlencoded

并且变量 itemSelected 永远不会被设置,因为 json 序列化被忽略了!

如果我删除 &lt;interceptor-ref name="servletConfig"/&gt;,我将无法访问会话!

我错过了什么?

【问题讨论】:

  • 对不起,我的错。我应该对此进行更彻底的测试。我以为问题真的根本不是问题。通过使用默认的 struts2 拦截器修复。它会在我的错误日志中留下很多警告,但我稍后会担心。
  • 这是一个观察结果,但 'extends="struts-default,json-default"' 最好写成: 'extends="json-default"' 因为如果你查看你的 struts2-json-plugin -x.x.x.jar 在默认包下打开struts-plugin.xml 你会看到'package name="json-default" extends="struts-default"' 显然没什么大不了的但是值得了解。

标签: json struts2 interceptor


【解决方案1】:

这里的问题似乎是您没有向您的操作发出 AJAX/JSON 请求,而是使用标准表单方法向其发布。

您提供的消息表明 Content-Type request 标头应与 JSON 相关,但实际上是 x-www-form-urlencoded。换句话说,该请求不是 AJAX/JSON 请求,而只是一个普通的表单提交。

仔细检查您是如何向JSONAction 发出请求的,并确保您确实正确地发送了请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多