2012-06-07 13 views
5

¿Es posible tener el valor de un campo de entrada oculto como una matriz y luego pasarlo al controlador Spring MVC?Arreglo de entrada oculta de Javascript

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

Y luego en el controlador de hacer algo como

@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]); 
... 
} 

¿Qué tal si estoy trabajando con una matriz asociativa? Donde los índices son cadenas en lugar de int

+0

JavaScript no tiene matrices asociativas. – Sampson

+0

@JonathanSampson Tal vez estoy usando el término equivocado. Quiero decir, en lugar de un índice como "0" y "1", hago 'myArray [" A "] =" Hello ";'. Sé que funciona porque he intentado 'alert (myArray [" A "])' y me da el cuadro emergente con "Hola". – szrrizvi

+0

@JonathanSampson: Pero los objetos pueden ser (y son) utilizados como mapas ... – Bergi

Respuesta

13

Su mejor opción sería stringify la matriz y luego asignarla.

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

El valor resultante será una cadena JSON que luego puede ser analizada en el servidor, la recreación de la matriz. Este enfoque también funciona para objetos si desea tener algo parecido a una matriz asociativa.

Debo notar que mientras que JSON tiene un soporte bastante bueno en todos los navegadores, los navegadores más antiguos pueden no ser compatibles. Puede polyfill the feature fairly easily en esos casos:

+1

no es necesario hacer. establecer el valor como una matriz hará exactamente lo que hace .join(). usar .join() es solo un procesamiento extra para nada. – Ian

+0

@ianpgall Nota. Tiendo a olvidar que JavaScript manejará automáticamente la conversión de una matriz al tipo y valor apropiados. – Sampson

+0

no esperaba que funcionara, pensé que podría incluir "[" y "]", pero de todos modos funcionó como .join(). no hay problema, solo quería señalarlo! – Ian

1

Sin embargo, lo configura en Javascript, tendrá que analizarlo en el servidor. Eso probablemente signifique dividir el valor por "," en una matriz de C#, y luego acceder a ella como lo desee. Todos los valores enviados en un envío de formulario se envían como una cadena exactamente como está.

Es posible que desee utilizar http://www.w3schools.com/jsref/jsref_join.asp para establecer el valor de la entrada oculta. Aunque no es necesario, parece estar bien sin usar .join(). Pero es importante recordar que el valor será una cadena en el servidor, no una matriz.

+0

echa un vistazo a http://w3fools.com/ – Bergi

+0

Sí, lo vi hace mucho tiempo. Si bien creo que es gracioso, no tiene nada que ver con el uso de las escuelas w3 para referencias simples. Proporcioné el enlace para que el OP pueda usar la sintaxis correctamente, no como una solución (especialmente porque digo que no se debe usar .join()). – Ian

1

Solo se puede pasar una cadena como parámetro, así como también el valor de una entrada. Eso significa que usted Array se convertirá automáticamente a una cadena uniéndolo con ";", también podría hacerlo manualmente con el .join() method.

Serverside luego tendrá que dividir esa cadena por el delimitador elegido.

Si desea enviarlos como una matriz, que yo sepa se necesitan dos elementos de entrada:

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

puede establecer el valor de una entrada como una matriz. javascript básicamente hace lo que .join() HARÍA, pero no es necesario usar .join() a menos que desee un delimitador que no sea "," – Ian

+0

Eso es exactamente lo que dije. Sin embargo, incluso usaría .join (",") para dejar en claro que estoy configurando una cadena. – Bergi

0

he encontrado la respuesta en medio de la siguiente link.

Cuando se desea asignar cualquier objeto JavaScript o una matriz hacerlo de la siguiente manera:

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

Tras el envío del formulario, en el serverside tenemos que decodificar la siguiente manera:

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

Este De esta manera, puede obtener cualquier matriz de JavaScript en el lado del servidor, que se establece dentro de un elemento de formulario a través de JavaScript, en el lado del cliente.

+0

@Flexo gracias por la guía y la edición! ¡Seguirá eso mientras tanto! :-) –

Cuestiones relacionadas