【问题标题】:HTTP Array Parameters with Struts 2 via an Ajax Call通过 Ajax 调用使用 Struts 2 的 HTTP 数组参数
【发布时间】:2010-08-18 02:34:46
【问题描述】:

我在将数组参数发送到 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 可排序控件时也遇到了这个问题,但我使用正则表达式删除了“[]”字符解决了这个问题。我想避免这种情况,因为那个解决方案让我很困扰。我想我可以自己构建字符串,而不是使用对象表示法,但除非你能说服我,否则我想使用对象表示法。

【问题讨论】:

    标签: jquery ajax struts2 type-conversion


    【解决方案1】:

    IIRC Struts 不喜欢 jQuery 1.4+ 格式,但您可以使用传统格式,只需在您的 $.ajax() 调用之前随时输入即可:

    $.ajaxSettings.traditional = true; 
    

    您可以在$.param() documentation 中阅读更多关于 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"
    

    【讨论】:

    • 好的...我如何才能及时了解这个微小但关键的变化?顺便谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多