Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/06/2010, 00:58
Pelirr
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: pasar array a objeto Collection

Hola, yo tengo un Action, y en el Action un objeto de tipo collection:

Collection<Long> listadoIdsElementosSeleccionados = new ArrayList<Long>();

y en la jsp, tengo un array, con números, tipo: [2, 56, 6897, 3]. Yo quería pasar este array de la jsp (en código javascript) a esa variable "listadoIdsElementosSeleccionados" de tipo Collection del Action, que relacionaba en la jsp como :

<s:hidden name="listadoIdsElementosSeleccionados" />

Al final he solucionado el problema. Por lo que he podido ver, de la jsp al action lo que se pasan son objeto String, no long, de ahí el primer problema. Y por otro lado, tampoco se puede pasar una lista desde código javascript tal y como yo lo quería hacer (o no he hallado el modo). La solución que he encontrado es obtener el array mediante código javascript con lo que necesito, ej : [2, 56, 6897, 3]. Después pasar este array a un string que sólo contenga los números y las comas, ej: 2, 56, 6897, 3. Pasar este string al action (que eso sí es fácil), recogerlo en el action con un objeto tipo String, y luego con un split quitarle las comas y pasarlo a array, y éste array, pasarlo a un objeto tipo Collection<Long>. Lo escribiré más o menos por si a alguien le sirve:

En la jsp:
Código:
...
<s:hidden name="idsElementosString" id="idsElementosString"/>
...
en código javascript:
var idsElementos = document.getElementById('idsElementosString');
...
y obtengo el array en código javascript, metiéndolo en esa variable:
idsElementos.value = arrayIdsElementosSeleccionados;
...
En el action:
Código:
...
	private Collection<Long> listadoIdsElementosLong = new ArrayList<Long>();
	private String idsElementosString;
...

this.setIdsElementosString(idsElementosString);
		String[] listadoIdsElementosString = this.getIdsElementosString().split(",");
		for (int i=0; i < listadoIdsElementosString.length; i++)
		{
			long idLong = Integer.parseInt(listadoIdsElementosString[i]);
			listadoIdsElementosLong.add(idLong);			
		}
		this.setListadoIdsElementosLong(listadoIdsElementosLong);
Espero que le sirva a alguien esta explicación, gracias por responderme.
Un saludo