如何使用jQuery Ajax将javascript数组发送到struts动作

时间:2017-02-17 10:50:52

标签: java jquery ajax struts2 type-conversion

我是Struts 2的新手。我想通过使用jQuery AJAX请求将一个javascript数组发送到Struts动作类。
警报工作正常,execute()无效。
当我将System.out.println("language : "+ language);放入execute()方法时,输出为

  

语言:null

var langArr = [];
    $("#language").each(function()
    {
      var selectedLang = $("select").val();
      var selectedValues = $(this).val();
      langArr.push(selectedValues);
     });
    alert("Languages : " + langArr);

    $.ajax({
        method: "POST",
        url: "getProjectPost",
        data: { "language" : langArr },
        dataType : "json",
        traditional: true,
        success:
            function()
            {
             alert("Success");
            },
        error: 
           function()
            {
             alert("Error");
            }
    });

这是我的动作类

public class ProjectPostAction {

    private int[] language;

    public final int[] getLanguage() {
        return language;
    }

    public final void setLanguage(int[] language) {
        this.language = language;
    }

    public String execute() throws Exception {          
           System.out.println("language : "+ language[0]);
           return "success";    
    }

2 个答案:

答案 0 :(得分:2)

当使用$.param执行ajax请求时,Jquery在内部使用$.ajax序列化作为参数发送的数据。

数据应设置为整数数组或字符串,并以逗号分隔整数列表,因此jQuery可以在发送请求之前正确序列化它。

您只能使用traditional设置向struts2发送数组参数,因为struts使用类型转换来使用键作为参数名称来填充操作的属性。

因此,数组应该是一个原始整数数组,但是你的数组包含非原始整数的其他对象。

为了演示您可以看到这个demo,了解如何获取参数值并按照与$.ajax相同的方式对其进行序列化。

Struts2也可以通过默认类型转换转换包含逗号分隔值的字符串。例如,您可以看到how checkbox list values are passed to struts action

答案 1 :(得分:0)

要在Struts2中使用JSON,最好的选择是导入Struts2 JSON plugin

然后,

  1. 通过使用 Json Result {{将动作暴露到 JSP时,您将获得自动JSON转换3}},但是
  2. 您需要在拦截器堆栈中包含 Json Interceptor ,以便将转发到 JSP 动作,as described hereas described here