Параметры массива HTTP со Struts 2 через вызов Ajax

У меня проблема с отправкой параметров массива в класс действий 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, но я решил это, используя регулярное выражение для удаления символов «[]». Я хотел бы избежать этого, потому что это решение беспокоит меня. Я полагаю, что мог бы просто построить строку самостоятельно, вместо использования нотации объекта, но если вы не можете убедить меня в обратном, я бы хотел вместо этого использовать нотацию объекта.


person partkyle    schedule 18.08.2010    source источник


Ответы (1)


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"
person Nick Craver    schedule 18.08.2010
comment
Хорошо... Как я могу быть в курсе этих небольших, но важных изменений? Кстати спасибо за ответ - person rsilva4; 17.09.2010