以下代码会导致错误:
<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?
答案 0 :(得分:102)
脚本是嵌入在页面代码中的原始java,如果在脚本中声明变量,那么它们就会成为页面中嵌入的局部变量。
相比之下,JSTL完全使用范围属性,可以在page
,request
或session
范围内使用。您需要重新编写Scriptlet以将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
。
更好的是,根本不要使用小脚本:它们会让小耶稣哭泣。
答案 1 :(得分:13)
@skaffman把它钉死了。他们每个人都生活在自己的环境中。但是,我不会考虑将scriptlet用作 解决方案。你想avoid他们。如果你想要的是在EL中连接字符串,你发现+
运算符在EL中的字符串失败(这是正确的),那么就这样做:
<c:out value="abc${test}" />
或者,如果要从另一个名为abc
的范围变量中获取${resp}
,请执行以下操作:
<c:out value="${resp}${test}" />