一尘不染

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

ajax

我在向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"]
    }
});

导致发生异常:

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

如何使用jQuery将数组发送到Struts2动作类?是否需要包含拦截器中的某些内容?还是在jQuery中有删除此选项的选项?

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


阅读 171

收藏
2020-07-26

共1个答案

一尘不染

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"
2020-07-26