Struts2 JSON拦截器未填充我的Action类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2 JSON拦截器未填充我的Action类相关的知识,希望对你有一定的参考价值。

我正在开发一个Web应用程序,其中客户端javascript库(ExtJS)使用JSON请求有效负载将请求发送到支持Struts的后端。我的问题是我无法弄清楚如何从有效负载中获取变量到我的Action类中。

我从使用日志语句知道,前端正在调用我的操作类中的正确方法。只是我期望变量不应该是null

我正在尝试使用struts2-json-plugin作为拦截器。 Struts拦截器对我来说是新手,我还没有找到关于以这种方式使用struts2-json-plugin的任何清晰示例。

这是我的pom.xml中的Struts依赖项:

<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
  <version>2.2.3.1</version>
</dependency>
<dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-json-plugin</artifactId>
   <version>2.2.3.1</version>
</dependency>        

这里是请求正文(Firebug的内容:]

"id":15,"translation":"Blah blah"

我的Action类的相关部分看起来像这样:

public class TranslationsAction extends ActionSupport 

    private Long id;
    private String translation;

    public String save() throws Exception 

        log.debug("TranslationsAction.save() called.");
        log.debug("ID: " + this.id + ", Translation: " + this.translation);

        return "\"foo\":\"bar\"";
    

    public void setId(Long id) 
        this.id = id;
    

    public void setTranslation(String translation) 
        this.translation = translation;
    


这里是我的struts.xml的相关部分:

<package name="foo" namespace="/foobar" extends="json-default">    
    <action name="save-translation" method="save"
            class="my.package.name.action.TranslationsAction">
        <result name="success">/jsp/json.jsp</result>
    </action>
</package>

有什么想法吗?

答案

我自己发现了问题。我未能正确配置struts.xml。我需要首先在程序包中定义一个拦截器,然后告诉我要使用它的操作,如:

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

    <!-- Added this: -->
    <interceptors>
        <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
    </interceptors>

    <action name="save-translation" method="save"
            class="my.package.name.action.TranslationsAction">

        <!-- And added this: -->
        <interceptor-ref name="myDefaultInterceptorStack" />
        <interceptor-ref name="json" />

        <result name="success">/jsp/json.jsp</result>
    </action>
</package>

我这是一个愚蠢的疏忽。 :-\

另一答案

很好的JSON插件需要遵循一些步骤才能正常工作,其中很少几个

  1. “内容类型”必须为“ application / json”。
  2. JSON内容必须格式正确,请参阅json.org了解语法。

最好是从调用Action类并将数据发送到Action类的位置粘贴JS(ExtJS)的相关部分。

[请查看官方JSON插件页面以了解详细信息

json-plugin

另一答案

[在这里question添加了类似的问题,有人可以帮助我吗?在此先感谢

以上是关于Struts2 JSON拦截器未填充我的Action类的主要内容,如果未能解决你的问题,请参考以下文章

struts2中struts.xml配置文件详解未整理

struts2中struts.xml配置文件详解未整理

J2EE关于struts2自动填充参数的理解

Struts2 MVC基础介绍

使用struts2未登录,不能操作

Struts2自定义拦截器处理全局异常