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.