9 Stimmen

HTTP-Array-Parameter mit Struts 2 über einen Ajax-Aufruf

Ich habe ein Problem, Array-Parameter an eine Struts 2-Action-Klasse zu senden. Ich bin mit Struts 2.1.8.1.

Hier ist ein Beispielcode:

public class MyAction extends ActionSupport {

    private String[] types;

    public String execute() {
        return SUCCESS;
    }

    public String[] getTypes() {
        return types;
    }

    public void setTypes(String[] types) {
        this.types = types;
    }
}

Das Problem tritt auf, wenn ein Array über die Jquery-Ajax-Methode gesendet wird:

$.ajax({
    type: 'POST',
    url: 'Myaction.action',
    data: {
        types: ["this", "is", "a", "test"]
    }
});

löst eine Ausnahme aus:

ognl.ParseException: Encountered " "]" "] "" at line 1, column 7.

Wie kann ich jQuery verwenden, um das Array an meine Struts2-Aktionsklasse zu senden? Gibt es etwas im Sinne eines Abfangjägers, den ich einschließen muss? Oder gibt es eine Option in jQuery, um dies zu entfernen?

Ich stieß auch auf dieses Problem mit dem jQuery UI Sortable-Steuerelement, aber ich löste, dass mit einer Regex, um die "[]" Zeichen zu entfernen. Das würde ich gerne vermeiden, denn diese Lösung stört mich. Ich nehme an, ich könnte nur die Zeichenfolge selbst zu bauen, anstatt mit der Objektnotation, aber es sei denn, Sie können mich überzeugen, anders, ich möchte die Objektnotation stattdessen verwenden.

13voto

Nick Craver Punkte 609016

IIRC Struts nicht wie die jQuery 1.4+ Format, können Sie das traditionelle Format verwenden, obwohl, setzen Sie einfach diese jederzeit vor Ihrem $.ajax() anrufen:

$.ajaxSettings.traditional = true; 

Sie können mehr über den 1.4+ Standard und die traditionelle Serialisierung in der $.param() Dokumentation Die beste Illustration ist ihr kurzes Beispiel:

// <=1.3.2: (traditional in 1.4+)
$.param({ a: [2,3,4] }) // "a=2&a=3&a=4"
// >=1.4: (default in 1.4+)
$.param({ a: [2,3,4] }) // "a[]=2&a[]=3&a[]=4"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X