Saltar al contenido

Acceda a las variables Java / Servlet / JSP / JSTL / EL en JavaScript

Solución:

Debe darse cuenta de que Java / JSP es simplemente un productor de código HTML / CSS / JS. Entonces, todo lo que necesita hacer es dejar que JSP imprima la variable de Java como si fuera una variable de JavaScript y que la salida del código HTML / JS generado sea sintácticamente válida.

Siempre que la variable de Java esté disponible en el ámbito EL por ${foo}, aquí hay varios ejemplos de cómo imprimirlo:

<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>

Imagina que la variable de Java tiene el valor "bar", JSP finalmente generará este HTML que puede verificar haciendo clic con el botón derecho, Ver fuente en el navegador web:

<script>var foo = 'bar';</script>
<script>someFunction('bar');</script>
<div onclick="someFunction('bar')">...</div>

Tenga en cuenta que esas comillas simples son obligatorias para representar una variable de tipo cadena en JS. Si ha usado var foo = ${foo}; en su lugar, se imprimiría var foo = bar;, que puede terminar en errores de “barra no definida” cuando intenta acceder a ella más abajo en el código JS (puede ver errores JS en la consola JS del conjunto de herramientas del desarrollador web del navegador que puede abrir presionando F12 en Chrome / FireFox23 + / IE9 +). También tenga en cuenta que si la variable representa un número o un valor booleano, que no necesita estar entre comillas, entonces funcionará bien.

Si la variable se origina a partir de una entrada controlada por el usuario, tenga en cuenta que debe tener en cuenta los agujeros de ataque XSS y el escape JS. Cerca de la parte inferior de nuestra página wiki de EL, puede encontrar un ejemplo de cómo crear una función EL personalizada que escapa a una variable de Java para un uso seguro en JS.

Si la variable es un poco más compleja, por ejemplo, un bean Java, o una lista de los mismos, o un mapa, entonces puede usar una de las muchas bibliotecas JSON disponibles para convertir el objeto Java en una cadena JSON. Aquí hay un ejemplo asumiendo Gson.

String someObjectAsJson = new Gson().toJson(someObject);

Tenga en cuenta que de esta manera ya no necesita imprimirlo como una cadena entre comillas.

<script>var foo = ${someObjectAsJson};</script>

Ver también:

  • Nuestra página wiki JSP: consulte el capítulo “JavaScript”.
  • ¿Cómo escapar de JavaScript en JSP?
  • Llame a Servlet e invoque el código Java desde JavaScript junto con los parámetros
  • ¿Cómo usar Servlets y Ajax?

Si está rellenando previamente los campos del formulario en función de los parámetros de la solicitud HTTP, ¿por qué no hacerlo simplemente en el lado del servidor en su JSP … en lugar de hacerlo en el lado del cliente con JavaScript? En JSP se vería vagamente así:

<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>

En el lado del cliente, JavaScript realmente no tiene el concepto de un “objeto de solicitud”. Prácticamente tiene que analizar la cadena de consulta usted mismo manualmente para obtener los parámetros CGI. Sospecho que eso no es lo que realmente quieres hacer.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *