我可以将JSP scriptlet中的variables传递给JSTL,但不能将JSTL中的variables传递给JSP scriptlet
以下代码会导致一个错误:
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}"/>
错误说
"error a line 4: unknown symbol 'test'".
如何将test
从JSTL代码传递到JSP脚本?
脚本是embedded在页面代码中的原始Java,如果你在脚本中声明了variables,那么它们将成为embedded在页面中的局部variables。
相比之下,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钉了下来。 他们各自生活在各自的背景下。 但是,我不会考虑使用scriptlets作为解决scheme。 你想避免它们。 如果你只想在EL中连接string,并且发现EL中的string失败(这是正确的),那么只需要:
<c:out value="abc${test}" />
或者,如果从另一个名为${resp}
作用域variables获得abc
,则执行:
<c:out value="${resp}${test}" />