2012-06-07 166 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感谢您的指导和编辑! 在此期间将继续! :-) –