2017-02-17 91 views
4

我是Struts 2的新手。我想通过使用jQuery AJAX请求将JavaScript数组发送到Struts动作类。
警报工作正常,​​不起作用。
当我在​​方法把System.out.println("language : "+ language);,输出如何通过使用jQuery Ajax将javascript数组发送到struts动作

语言: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";  
    } 
+0

什么打印在警报中? –

回答

2

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

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

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

所以,该数组应该是一个原始整数数组,但是您的数组包含其他不是原始整数的对象。

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

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

0

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

然后,

  1. 从动作暴露在数据 JSP中,通过使用JSON结果as described here你会得到自动JSON的转换,但
  2. 你需要在您的拦截器堆栈中包含Json拦截器以将JSON转换 JSP 转换为的动作,as described herehere
相关问题