2012-06-07 125 views
5

是否有可能將隱藏輸入字段的值作爲數組,然後將其傳遞給Spring MVC控制器?Javascript隱藏輸入數組

function foo(){ 
var myArray = new Array(); 
myArray[0] = "Hello"; 
myArray[1] = "World!"; 
document.getElementById("hiddenInp").value=myArray; 
} 

然後在控制器這樣做

@RequestMapping ... 
public String test(HttpServletRequest request){ 
String[] myArray = request.getParameter("hiddenInp"); 
// Assuming that the name of the hidden input field is also hiddenInp 
System.out.println(myArray[0] + myArray[1]); 
... 
} 

怎麼樣,如果我與一個關聯數組工作?如果索引是字符串而不是int

+0

JavaScript沒有關聯數組。 – Sampson

+0

@JonathanSampson也許我使用了錯誤的術語。我的意思是,而不是索引,如「0」和「1」,我做'myArray [「A」] =「你好」;'。 我知道這是有效的,因爲我已經嘗試過'alert(myArray [「A」])',並且它給了我彈出框「Hello」。 – szrrizvi

+0

@JonathanSampson:但是物體可以(並且)被用作地圖... – Bergi

回答

13

你最好的選擇是stringify數組然後賦值。

element.value = JSON.stringify(["Hello", "World"]); 

所得的值將是一個JSON串然後可以在服務器上解析,重新創建陣列。如果你希望有類似於關聯數組的東西,這種方法也適用於對象。

我應該注意到,雖然JSON在今天的瀏覽器上有很好的支持,但是舊版瀏覽器可能不支持它。您可以在這些情況下使用polyfill the feature fairly easily

+1

沒有必要去做。將該值設置爲數組將完全符合.join()的要求。使用.join()只是額外的處理。 – Ian

+0

@ianpgall注意。我傾向於忘記JavaScript會自動處理將數組轉換爲適當的類型和值。 – Sampson

+0

我沒有想到它會起作用 - 我認爲它可能包含「[」和「]」,但它最終以.join()的方式工作。沒問題,只是想指出來! – Ian

1

但是,您將其設置爲Javascript,則必須在服務器上解析它。這可能意味着將值分割爲「,」到C#數組中,然後按需要訪問它。在表單提交中發送的所有值均按原樣以字符串形式發送。

您可能想要使用http://www.w3schools.com/jsref/jsref_join.asp來設置隱藏輸入的值。這並不是必要的 - 它似乎沒有使用.join()。但重要的是要記住,該值是服務器上的字符串,而不是數組。

+0

看看http://w3fools.com/ – Bergi

+0

是的,我很久以前就看到了。雖然我認爲這很有趣,但與使用w3學校進行簡單參考無關。我提供了鏈接,以便OP可以正確使用該語法,而不是解決方案(特別是因爲我說.join()不應該使用)。 – Ian

1

您只能傳遞一個字符串作爲參數,以及輸入的值。這意味着Array將自動轉換爲字符串,並加入「;」,您也可以使用.join() method手動執行此操作。

Serverside然後您將需要通過所選的分隔符分割該字符串。

如果你想送他們作爲一個數組,據我所知,你將需要兩個輸入元素:

<input type="hidden" name="hiddenInp[]"<!-- should be more descriptive --> value="a" /> 
<input type="hidden" name="hiddenInp[]"<!-- the same name --> value="b" /> 
+0

您可以將輸入值設置爲數組。 javascript基本上做什麼.join()會做,但沒有必要使用.join(),除非你想要一個除「,」以外的分隔符 – Ian

+0

這正是我所說的。但是,我甚至會使用.join(「,」)來說明我正在設置一個字符串。 – Bergi

0

我找到了答案通過以下link

當你想分配任何JavaScript對象或數組做如下:

var javascript_variable = 'object' or ['fruit1', 'fruit2', 'fruit3']; 
$('#hiden_input_element_unique_id').val(JSON.stringify(javascript_variable)); 

表單提交後,在服務器端,我們必須對其進行解碼如下:

$fruits_array = json_decode($_POST['hiden_input_element_unique_name']); 

這你可以在服務器端獲得任何JavaScript數組,在客戶端通過JavaScript將其設置爲表單元素!

+0

@Flexo感謝您的指導和編輯! 在此期間將繼續! :-) –