我可以将变量从JSP脚本发送到JSTL,但不能从JSTL转到JSP脚本,而不会出错
题
以下代码导致错误:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + test;
pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>
错误说
"error a line 4: unknown symbol 'test'".
我如何通过 test
从JSTL代码到JSP Scriptlet?
解决方案
脚本是在页面代码中嵌入的RAW JAVA,如果您在脚本中声明变量,则它们成为页面中嵌入的本地变量。
相比之下,JSTL完全与范围属性合作,要么 page
, request
或者 session
范围。您需要重新编写脚本钓鱼 test
作为一个属性:
<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}"/>
如果您查看文档 <c:set>
, ,您会看到您可以指定 scope
作为 page
, request
或者 session
, ,默认为 page
.
更好的是,不要完全使用脚本:他们让耶稣哭泣。
其他提示
@Skaffman将其钉住。他们在自己的环境中生活。但是,我不会考虑使用scriptlet作为 这 解决方案。你想 避免 他们。如果您想要的只是在EL中的串联串,您发现 +
操作员因EL中的字符串而失败(正确),然后只做:
<c:out value="abc${test}" />
或者如果 abc
是从一个名称的另一个范围变量获得的 ${resp}
, , 然后做:
<c:out value="${resp}${test}" />
不隶属于 StackOverflow