Cor*_*ish 50 java jsp scope jstl scriptlet
以下代码导致错误:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + test;
pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>
Run Code Online (Sandbox Code Playgroud)
错误说
"error a line 4: unknown symbol 'test'".
Run Code Online (Sandbox Code Playgroud)
如何test从JSTL代码传递到JSP scriptlet?
ska*_*man 105
脚本是嵌入在页面代码中的原始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}"/>
Run Code Online (Sandbox Code Playgroud)
如果您查看文档<c:set>,您将看到您可以指定scope为 page,request或者session默认为page.
更好的是,不要使用小脚本:它们会让小耶稣哭泣.
Bal*_*usC 14
@skaffman把它钉死了.他们生活在各自的环境中.不过,我不会考虑使用小脚本作为该解决方案.你想避免它们.如果你想要的只是在EL中连接字符串,你发现+操作符在EL中的字符串失败(这是正确的),那么就这样做:
<c:out value="abc${test}" />
Run Code Online (Sandbox Code Playgroud)
或者如果abc要从另一个范围内的变量名称获取${resp},那么执行:
<c:out value="${resp}${test}" />
Run Code Online (Sandbox Code Playgroud)