10

是否可以将隐藏输入字段的值作为数组传递给 Spring MVC 控制器?

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

4

4 回答 4

19

您最好的选择是对数组进行字符串化然后分配它。

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

结果值将是一个JSON字符串,然后可以在服务器上对其进行解析,从而重新创建数组。如果您希望拥有类似于关联数组的东西,这种方法也适用于对象。

我应该注意到,虽然JSON现在跨浏览器的支持相当好,但旧的浏览器可能不支持它。在这些情况下,您可以相当轻松地填充该功能:

于 2012-06-07T21:06:31.183 回答
2

您只能将字符串作为参数以及输入值传递。这意味着您的 Array 将通过使用 " " 连接它来自动转换为字符串;,您也可以使用.join()method手动执行此操作。

然后,您需要在服务器端按所选分隔符拆分该字符串。

如果您想将它们作为数组发送,afaik 您将需要两个输入元素:

<input type="hidden" name="hiddenInp[]"<!-- should be more descriptive --> value="a" />
<input type="hidden" name="hiddenInp[]"<!-- the same name --> value="b" />
于 2012-06-07T21:12:50.340 回答
1

但是,您在 Javascript 中设置它,您必须在服务器上解析它。这可能意味着通过“,”将值拆分为 C# 数组,然后根据需要访问它。在表单提交中发送的所有值都按原样作为字符串发送。

您可能希望使用http://www.w3schools.com/jsref/jsref_join.asp来设置隐藏输入的值。但这不是必需的——不使用 .join() 似乎没问题。但重要的是要记住,该值将是服务器上的字符串,而不是数组。

于 2012-06-07T21:06:42.083 回答
1

我通过以下链接找到了答案。

当您要分配任何 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 将其设置为表单元素!

于 2014-09-13T16:39:32.387 回答