通过Ajax调用使用Struts 2的HTTP数组参数

我在向Struts 2动作类发送数组参数时遇到问题。 我正在使用struts 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"] } }); 

导致exception发生:

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

如何使用jQuery将数组发送到我的Struts2动作类? 我需要包含拦截器的某些内容吗? 或者jQuery中有一个选项可以删除它吗?

我也遇到了jQuery UI Sortable控件的这个问题,但我解决了使用正则表达式删除“[]”字符。 我想避免这种情况,因为这个解决方案困扰着我。 我想我可以自己构建字符串,而不是使用对象表示法,但除非你能说服我,否则我想使用对象表示法。

IIRC Struts不喜欢jQuery 1.4+格式,你可以使用传统格式,只需在$.ajax()调用之前随时放置:

 $.ajaxSettings.traditional = true; 

您可以在$.param()文档中阅读有关1.4+默认与传统序列化的更多信息,最好的例子是他们的简短示例:

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