【发布时间】: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 变量,因此在上面添加了 <interceptor-ref name="servletConfig"/> 行来设置会话变量,以便可以在以下 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;
}
但是当我有<interceptor-ref name="servletConfig"/> 时,错误日志显示:
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 序列化被忽略了!
如果我删除 <interceptor-ref name="servletConfig"/>,我将无法访问会话!
我错过了什么?
【问题讨论】:
-
对不起,我的错。我应该对此进行更彻底的测试。我以为问题真的根本不是问题。通过使用默认的 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