2010-12-14 5 views
0

J'essaye d'implémenter http://code.google.com/p/struts2-jquery/wiki/SelectTag#A_simple_Doubleselect_with_Topics mais je n'arrive pas à combiner l'intercepteur json avec d'autres intercepteurs avec succès.Sérialisation JSON (en utilisant le plugin Jquery) w/Struts2 intercepteurs -

Dans mon 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> 

est ici une partie du code de la classe d'action.

Notez que j'ai besoin la variable session et ont donc ajouté la ligne <interceptor-ref name="servletConfig"/> ci-dessus pour régler la variable de session afin qu'il puisse être utilisé dans le code Java suivant:

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; 
} 

mais quand j'ai <interceptor-ref name="servletConfig"/>, erreur journaux montrent:

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 

et la itemSelected variables n'est jamais parce que la sérialisation mis en JSON est ignoré!

Si je supprime <interceptor-ref name="servletConfig"/> alors je ne peux pas accéder à la session!

Qu'est-ce qui me manque?

+0

Désolé, mon mauvais. J'aurais dû tester cela plus en détail. Ce que je pensais être le problème n'était vraiment pas un problème du tout. Corrigé en utilisant les intercepteurs struts2 par défaut. Cela laisse beaucoup d'avertissements dans mes journaux d'erreurs mais je m'en soucierai plus tard. – rmc

+0

Ceci est une observation mais 'extends = "struts-default, json-default"' s'écrit mieux: 'extends = "json-default"' car si vous regardez dans votre struts2-json-plugin-xxxjar sous le paquet par défaut et open struts-plugin.xml, vous verrez que 'package name = "json-default" extends = "struts-default"' n'est évidemment pas une grosse affaire mais mérite d'être connu. – Quaternion

Répondre

0

Le problème ici semble être que vous ne faites pas de requête AJAX/JSON à votre action, vous l'affichez en utilisant une approche de formulaire standard.

Le message que vous avez fourni dit que la demande Content-Type tête devait être liée JSON, mais au lieu était x-www-form-urlencoded. En d'autres termes, la requête n'était pas une requête AJAX/JSON, mais était simplement un formulaire normal.

Vérifiez de nouveau comment vous faites la demande à votre JSONAction et assurez-vous que vous envoyez la demande correctement.

Questions connexes