Параметры 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 ""] ""] "" в строке 1, столбце 7.

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

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

9
задан partkyle 18 August 2010 в 02:34
поделиться

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"
13
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: