2017-02-17 57 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
相關問題