2010-12-14 4 views
0

Ich versuche http://code.google.com/p/struts2-jquery/wiki/SelectTag#A_simple_Doubleselect_with_Topics zu implementieren, aber ich kann nicht die json Abfangjäger mit anderen Abfangjäger scheinen erfolgreich zu kombinieren.JSON Serialisierung (mit jQuery Plugin) w/Struts2 Abfangjäger -

In meinem 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> 

Hier einige der Action-Klasse-Code.

Bitte beachte, dass ich brauche die session Variable und deshalb haben hinzugefügt, um die <interceptor-ref name="servletConfig"/> Linie über die Sitzungsvariable zu setzen, so dass es in den folgenden Java-Code verwendet werden:

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

aber wenn ich <interceptor-ref name="servletConfig"/> haben, Fehler Protokolle zeigen:

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 

und die Variable itemSelected nie, weil die json Serialisierung gesetzt wird ignoriert!

Wenn ich entfernen <interceptor-ref name="servletConfig"/> dann kann ich nicht die Sitzung zugreifen!

Was fehlt mir?

+0

Sorry, my bad. Ich hätte das gründlich testen sollen. Was ich für das Problem hielt, war wirklich kein Problem. Fixed mit Standard-Struts2 Interzeptoren. Es hinterlässt viele Warnungen in meinen Fehlerprotokollen, aber darüber mache ich mir später Gedanken. – rmc

+0

Dies ist eine Beobachtung, sondern 'erstreckt = "Streben-default, json-default"' besser als geschrieben steht: 'erstreckt = "json-default"' da, wenn man sich in Ihrem struts2-json-plugin-xxxjar unter dem Standardpaket und öffne struts-plugin.xml du wirst sehen, dass 'Paketname = "json-default" extends = "struts-default"' offensichtlich keine große Sache, aber wissenswert. – Quaternion

Antwort

0

Das Problem scheint hier zu sein, dass Sie nicht ein AJAX/JSON Anforderung an die Aktion machen, die Sie es sind Entsendung ein Standardformular Ansatz.

Die Nachricht, die Sie zur Verfügung gestellt haben, zu sagen, dass die Content-TypeAnfrage Header erwartet wurde JSON bezogen zu sein, war aber stattdessen x-www-form-urlencoded. Mit anderen Worten, die Anfrage war keine AJAX/JSON-Anfrage, sondern nur eine normale Formularübermittlung.

Überprüfen Sie, wie Sie die Anforderung an Ihre JSONAction machen und stellen Sie sicher, dass Sie tatsächlich die Anfrage korrekt senden.