2010-12-14 5 views
0

Я пытаюсь реализовать 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"/>, то я не могу получить доступ к сеансу!

Что мне не хватает?

+0

Извините, мой плохой. Я должен был проверить это более тщательно. Я думал, что проблема действительно не была проблемой вообще. Исправлено с использованием перехватчиков struts2 по умолчанию. Он оставляет много предупреждений в моих журналах ошибок, но об этом я буду беспокоиться позже. – rmc

+0

Это наблюдение, но «extends =» struts-default, json-default »'лучше написано как:' extends =" json-default "', поскольку, если вы посмотрите в своем struts2-json-plugin-xxxjar в пакете по умолчанию и откройте struts-plugin.xml, вы увидите, что «имя пакета =« json-default »extends =« struts-default »« очевидно, не имеет большого значения, но стоит знать. – Quaternion

ответ

0

Проблема заключается в том, что вы не делаете запрос AJAX/JSON к своему действию, вы отправляете его по стандартным формам.

Сообщение, которое вы предоставили говорит, что Content-Typeзапрос заголовок должен был быть в формате JSON, связанных, но вместо этого был x-www-form-urlencoded. Другими словами, запрос не был запросом AJAX/JSON, но представлял собой обычную форму.

Двойная проверка, как вы делаете запрос на свой JSONAction и убедитесь, что вы действительно отправляете запрос должным образом.

 Смежные вопросы

  • Нет связанных вопросов^_^