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étodogetAttribute()
en el objeto de ámbito apropiado (normalmentepageContext
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).