我可以将变量从 JSP scriptlet 传递给 JSTL,但不能从 JSTL 传递给 JSP scriptlet 而不会出错
Posted
技术标签:
【中文标题】我可以将变量从 JSP scriptlet 传递给 JSTL,但不能从 JSTL 传递给 JSP scriptlet 而不会出错【英文标题】:I can pass a variable from a JSP scriptlet to JSTL but not from JSTL to a JSP scriptlet without an error 【发布时间】:2011-04-03 23:13:02 【问题描述】:以下代码导致错误:
<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?
【问题讨论】:
【参考方案1】:脚本是嵌入在页面代码中的原始 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
。
更好的是,根本不要使用小脚本:它们会让小耶稣哭泣。
【讨论】:
JSTL 让我哭泣,或者至少在我不得不阅读许多丑陋的东西时感到畏缩。不过谢谢!【参考方案2】:@skaffman 确定了它。他们每个人都生活在自己的环境中。但是,我不会考虑将 scriptlet 用作 the 解决方案。你想avoid他们。如果您只想在 EL 中连接字符串,并且发现 +
运算符在 EL 中对字符串失败(这是正确的),那么只需执行以下操作:
<c:out value="abc$test" />
或者如果abc
是从另一个名为$resp
的作用域变量中获取的,那么这样做:
<c:out value="$resp$test" />
【讨论】:
以上是关于我可以将变量从 JSP scriptlet 传递给 JSTL,但不能从 JSTL 传递给 JSP scriptlet 而不会出错的主要内容,如果未能解决你的问题,请参考以下文章