我正在开发一个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插件需要遵循一些步骤才能正常工作,其中很少几个
最好是从调用Action类并将数据发送到Action类的位置粘贴JS(ExtJS)的相关部分。
[请查看官方JSON插件页面以了解详细信息
[在这里question添加了类似的问题,有人可以帮助我吗?在此先感谢