Я пытаюсь реализовать http://code.google.com/p/struts2-jquery/wiki/SelectTag#A_simple_Doubleselect_with_Topics, но я не могу совместить перехватчик json с другими перехватчиками.Сериализация JSON (с использованием JQuery plugin) с перехватчиками Struts2 -
В моей 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 по умолчанию. Он оставляет много предупреждений в моих журналах ошибок, но об этом я буду беспокоиться позже. – rmc
Это наблюдение, но «extends =» struts-default, json-default »'лучше написано как:' extends =" json-default "', поскольку, если вы посмотрите в своем struts2-json-plugin-xxxjar в пакете по умолчанию и откройте struts-plugin.xml, вы увидите, что «имя пакета =« json-default »extends =« struts-default »« очевидно, не имеет большого значения, но стоит знать. – Quaternion