2015-04-22 64 views
3

到目前爲止,我已經能夠通過AJAX調用將簡單的字符串發送到Struts2動作類。這一次,我需要做的是相同的,但一個String數組,所以我改變了這樣的代碼:使用jQuery AJAX調用發送數組到Struts2動作

1 AJAX調用:

var test = [1, 2, 3, 4, 5]; 

$.ajax({ 
    method: "POST", 
    url: "createexperiment4.action", 
    data: { test : test }, 
    success: 
     function() 
     { 
      window.location = "loadexperiments.action"; 
     } 
}); 

2. CreateExperiment4Action.java :

private String[] test; 

[...] 

public void setTest(String[] test) 
{ 
    this.test = test; 
} 

但是,數據並沒有到達動作的範圍。此外,我不斷收到此警告,這當然必須是我的問題的關鍵:

警告:參數[test []]與acceptedPattern模式不匹配!

也許這是某種配置問題?

+3

試着在你的ajax請求中設置'traditional:true,' – Musa

+2

究竟是什麼被髮送?從開發者網絡控制檯發佈輸出。 –

+0

謝謝@Musa,它取得了訣竅。我已經嘗試過'$ .ajaxSettings.traditional = true; '(看到[這裏](http://stackoverflow.com/questions/3508550/http-array-parameters-with-struts-2-via-an-ajax-call)),沒有任何效果。如果您將它作爲答案發布,我當然會接受它。 @AleksandrM,除了這個測試,它將是一個數組,包含表中一組(檢查)複選框的ID。 – jaff

回答

9

jQuery.ajax的數組默認序列化在名稱後附加[](例如test[]=1&test[]=2),而像PHP這樣的框架可以識別這種格式,而struts則不會。爲了防止這種行爲,請將traditional: true,配置添加到您的ajax請求中,該請求會提供類似test=1&test=2的內容。

var test = [1, 2, 3, 4, 5]; 
$.ajax({ 
    method: "POST", 
    url: "createexperiment4.action", 
    data: { test : test }, 
    traditional: true, 
    success: 
     function() 
     { 
      window.location = "loadexperiments.action"; 
     } 
}); 
相關問題