jsp jstl el scriptlet

jsp - Accediendo a una variable jstl dentro de un scriptlet



el (2)

El siguiente código causa un error:

<c:set var="test" value="test1"/> <% String resp = "abc"; resp = resp + ${test}; //in this line I got an Exception. out.println(resp); %>

¿No utilizo el lenguaje de expresión "$ {test}" en scriptlet.why?


JSTL variables JSTL son en realidad atributos, y de forma predeterminada tienen un ámbito en el nivel de contexto de la página.
Como resultado, si necesita acceder a un valor de variable JSTL en un scriptlet, puede hacerlo llamando al método getAttribute() en el objeto de ámbito apropiado (normalmente pageContext y solicitud).

resp = resp + (String)pageContext.getAttribute("test");

Código completo

<c:set var="test" value="test1"/> <% String resp = "abc"; resp = resp + (String)pageContext.getAttribute("test"); //No exception. out.println(resp); %>

Actualizar

Pero por qué esa excepción viene a mí.

Un scriptlet JSP se utiliza para contener cualquier fragmento de código que sea válido para el lenguaje de scripting utilizado en una página. La sintaxis para un scriptlet es la siguiente:

<% scripting-language-statements %>

Cuando el lenguaje de scripting se establece en java, un scriptlet se transforma en un fragmento de instrucción de lenguaje de programación Java y se inserta en el método de servicio del servlet de la página JSP.

En scriptlets puedes escribir código Java y ${test} en código no java.

No relacionado

  • ¿Cómo evitar el código de Java en archivos JSP?

El contenido de su código scriptlet (dentro de <% %> %% <% %> ) es un fragmento de código de lenguaje Java que se colocará en el método de servicio del servlet traducido (las JSP se traducen en clases de servlet). Solo la sintaxis java válida se puede colocar allí, por lo que no puede usar el lenguaje de expresión. Si desea agregar dos cadenas en JSP, si el primero es "abc" constante y el segundo es el valor de algún EL, puede usarlo fácilmente

abc${test}

Si desea almacenar el resultado en una variable de scripting, siga la respuesta de Aniket (aunque mi consejo es evitar el scripting).