test locations example javascript jsp servlets parameter-passing el

javascript - locations - spring boot static resources



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

Tengo un formulario en JSP. Debo rellenarlo en base al objeto de solicitud (del servlet). ¿Cómo uso Java Script para acceder a los atributos del objeto de solicitud o si puede sugerirme alguna otra forma mejor de completar el formulario de forma dinámica?


Debe darse cuenta de que Java / JSP es simplemente un productor de código HTML / CSS / JS. Entonces, todo lo que tiene que hacer es dejar que JSP imprima la variable 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 Java esté disponible en el alcance EL por ${foo} , aquí hay varios ejemplos de cómo imprimirla:

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

<script>someFunction(''${foo}'');</script>

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

Imagine que la variable Java tiene el valor "bar" , luego 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 por lo tanto obligatorias para representar una variable de tipo cadena en JS. Si ha usado var foo = ${foo}; en cambio, imprimiría var foo = bar; , que puede terminar en errores de "barra no definida" cuando intenta acceder 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 pulsando F12 en Chrome / FireFox23 + / IE9 +). También tenga en cuenta que si la variable representa un número o un booleano, que no necesita ser citado, entonces funcionará bien.

Si la variable se origina a partir de una entrada controlada por el usuario, ten en cuenta que se deben tener en cuenta los agujeros de ataque XSS y el escape JS . Cerca de la parte inferior de nuestra página EL wiki puede encontrar un ejemplo de cómo crear una función EL personalizada que escapa de una variable Java para 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, puede usar una de las muchas bibliotecas JSON disponibles para convertir el objeto Java en una cadena JSON. Aquí hay un ejemplo asumiendo a Gson.

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

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

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

Ver también:


En la página JSP:

<c:set var="list_size" value="${list1.size() }"></c:set>

Acceda a este valor en la página de Javascipt usando:

var list_size = parseInt($(''#list_size'').val());

Agregué la página de javascript en mi proyecto externamente.


Si está rellenando previamente los campos de formulario en función de los parámetros en la solicitud HTTP, ¿por qué no simplemente hacer esto en el lado del servidor en su JSP ... en lugar de hacerlo en el lado del cliente con JavaScript? En el 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". Tienes que analizar la cadena de consulta manualmente para obtener los parámetros CGI. Sospecho que eso no es lo que realmente quieres hacer.