Параметры массива HTTP со Struts 2 через Ajax-вызов - PullRequest
9 голосов
/ 18 августа 2010

У меня проблема с отправкой параметров массива в класс действий Struts 2. Я использую распорки 2.1.8.1.

Вот пример кода:

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

Проблема заключается в отправке массива с помощью метода jquery ajax:

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

вызывает исключение:

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

Как я могу использовать jQuery для отправки массива в мой класс действий Struts2? Есть ли что-то вроде перехватчика, которое мне нужно включить? Или в jQuery есть возможность удалить это?

Я также сталкивался с этой проблемой с элементом управления jQuery UI Sortable, но я решил это с помощью регулярного выражения для удаления символов «[]». Я хотел бы избежать этого, потому что это решение беспокоит меня. Я полагаю, что я мог бы просто построить строку сам, вместо того, чтобы использовать нотацию объекта, но если вы не можете убедить меня в обратном, я бы хотел вместо этого использовать нотацию объекта.

1 Ответ

13 голосов
/ 18 августа 2010

IIRC Struts не нравится формат jQuery 1.4+, но вы можете использовать традиционный формат, просто поставьте его в любое время до вашего $.ajax() вызова:

$.ajaxSettings.traditional = true; 

Вы можете узнать больше о стандартной версии 1.4+ и традиционной сериализации в документации $.param() , лучшая иллюстрация - их короткий пример:

// <=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"
...