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