java - Puedo pasar una variable de un scriptlet JSP a JSTL pero no de JSTL a un scriptlet JSP sin un error
scope (2)
@skaffman lo clavó. Viven cada uno en su propio contexto. Sin embargo, no consideraría usar scriptlets como la solución. Te gustaría avoid . Si todo lo que quiere es concatenar cadenas en EL y descubrió que el operador +
falla para cadenas en EL (que es correcto), simplemente haga lo siguiente:
<c:out value="abc${test}" />
O si se obtiene abc
de otra variable de ámbito denominada ${resp}
, entonces hazlo:
<c:out value="${resp}${test}" />
El siguiente código causa un error:
1. <c:set var="test" value="test1"/>
2. <%
3. String resp = "abc";
4. resp = resp + test;
5. pageContext.setAttribute("resp", resp);
6. %>
7. <c:out value="${resp}"/>
El error dice
"error a line 4: unknown symbol ''test''".
¿Cómo paso la test
del código JSTL al scriptlet JSP?
Los scripts son java en bruto incrustados en el código de la página, y si declaras variables en tus scripts, se convierten en variables locales incrustadas en la página.
Por el contrario, JSTL funciona completamente con atributos de ámbito, ya sea en la page
, request
o alcance de la session
. Debes volver a trabajar tu scriptlet para test
peces como un atributo:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
String test = pageContext.getAttribute("test");
resp = resp + test;
pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>
Si mira los documentos de <c:set>
, verá que puede especificar el scope
como page
, request
o session
, y por defecto está en la page
.
Mejor aún, no use ningún scriptlets: hacen llorar al bebé Jesús.