我正在尝试实现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"/>
,则无法访问会话!
我错过了什么?
答案 0 :(得分:0)
这里的问题似乎是您没有对您的操作发出AJAX / JSON请求,而是使用标准表单方法向其发布。
您提供的消息是,Content-Type
请求标头应与JSON相关,而是x-www-form-urlencoded
。换句话说,请求不是AJAX / JSON请求,而只是一个普通的表单提交。
仔细检查您向JSONAction
发出请求的方式,并确保您实际上正在发送请求。