miércoles, 23 de noviembre de 2011

Pasar una variable de JavaScript a Jsp

Hace unos días, mientras programaba tuve un escenario inusual. Si buscamos en internet sobre el asunto, llegamos a la conclusión de que para pasar una variable de JavaScript a Jsp necesitamos AJAX. Ésto es debido a que la página Jsp se interpreta en el servidor y el JavaScript se interpreta en el lado del cliente, es imposible asignar una variable de JavaScript a una de Jsp, puesto que la respuesta del servidor al cliente ya llegó y el código que se ejecuta en el servidor ya terminó, por eso, la única forma es hacerlo vía AJAX.

Dicho esto pongámonos en situación: Necesitaba pasar un objeto Java creado en una Jsp a otra Jsp vía AJAX para generar contenido dinámico y devolver a la página principal. Ésto quiere decir que el objeto Java lo tendría que pasar a JavaScript y mandarlo por AJAX para que luego volviera a convertirlo en objeto Java. Para pasar el objeto Java a Javascript no hay problema. Por ejemplo, podemos hacer:

y después:
Y conseguimos asignar los datos de la variable Jsp a una de JS. Pero el problema reside en generar el objeto Java desde una variable en JS. 

Después de investigar mucho llegué a a conclusión de que no hay una forma bonita de hacerlo.

Mi idea era hacer una serialización java para que pudiera mandarlo por AJAX y crear una copia idéntica en la otra Jsp, pero resulta que JavaScript no soporta arrays de byte. De esta forma no podemos mandar los bytes que nos devuelven las funciones de las clases ObjectOutputStream y DataInputStream y leerlas en el jsp de destino. Si conseguimos mandar los bytes, tenemos que interpretar estos bytes por nuestra cuenta y esta interpretación será distinta según el tipo de datos que son, como floats, integers o strings.

La forma alternativa a este escenario que se me ocurre es la de pasar la información de este objeto Java a variables de JavaScript y generar el contenido en la máquina cliente. La pega de esta forma es que puede ser muy pesada la carga en variables de todo el objeto Java.

Aquí podéis encontrar más necesidades de JavaScript.



5 comentarios:

Anónimo dijo...

como hago al revez
var b = "hola";
<% String a = %> b;
pasar una variable de JS a Java

Unknown dijo...

Como expongo en la entrada, no hay una forma sencilla de hacerlo. Lo siento :/

Anónimo dijo...

NO SE PUEDE.. =(

Anónimo dijo...

Si se puede es una forma cutre pero que funciona. Mandas el dato a la misma pagina jsp donde tengas este codigo.

<%
String a = request.getParameter("datoquequieras");
%>

Unknown dijo...

Alguien pudo hacerlo dentro de la misma pagina?

Publicar un comentario