首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Struts2 JSON拦截器没有填充我的操作类

Struts2 JSON拦截器没有填充我的操作类
EN

Stack Overflow用户
提问于 2012-01-17 05:45:25
回答 2查看 6.1K关注 0票数 1

我正在开发一个web应用程序,在该应用程序中,客户端Struts库(ExtJS)使用JavaScript请求负载将请求发送到我的支持ExtJS的后端。我的问题是,我不知道如何将有效负载中的变量放入我的Action类中。

通过使用日志语句,我知道前端正在调用我的action类中的正确方法。只是我期望的变量是null,而它们不应该是。

我正在尝试使用struts2-json-plugin作为拦截器。Struts拦截器对我来说是个新东西,我还没能在网上找到任何关于以这种方式使用struts2-json-plugin的明确例子。

下面是我的pom.xml中的Struts依赖项

代码语言:javascript
复制
<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的转交):

代码语言:javascript
复制
{"id":15,"translation":"Blah blah"}

我的Action类的相关部分如下所示:

代码语言:javascript
复制
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的相关部分

代码语言:javascript
复制
<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>

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-18 03:43:42

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

代码语言:javascript
复制
<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>

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

票数 2
EN

Stack Overflow用户

发布于 2012-01-17 14:39:53

JSON插件需要遵循一些步骤才能正常工作,下面是其中的几个步骤

  1. “content -
  2. ”必须是"application/json".
  3. The JSON内容必须格式正确,有关语法,请参阅json.org。

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

有关详细信息,请查看官方JSON插件页面

json-plugin

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8886713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档