我是Struts 2的新手。我想使用jQuery AJAX请求将javascript数组发送到Struts动作类。 警报运行正常,但execute()没有运行。 当我把 System.out.println("language : "+ language);在execute()方法,输出
execute()
System.out.println("language : "+ language);
语言:null。
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"; }
$.param当使用进行ajax请求时,jQuery 内部使用参数序列化发送的数据$.ajax。
$.param
$.ajax
数据应设置为整数数组或带有逗号分隔的整数列表的字符串,因此jQuery可以在发送请求之前正确序列化它。
您只能通过traditional设置将数组参数发送到struts2,因为struts使用类型转换来使用键作为参数名称来填充操作的属性。
traditional
因此,该数组应该是原始整数的数组,但是您的数组包含不是原始整数的其他对象。
为了进行演示,您可以看到这一点,demo以了解如何获取参数值并将其序列化,就像执行操作一样$.ajax。
demo