我可以将变量从 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 完全使用作用域属性,在pagerequestsession 作用域。您需要重新编写您的 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"/>

如果您查看&lt;c:set&gt; 的文档,您会发现您可以将scope 指定为pagerequestsession,默认为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 而不会出错的主要内容,如果未能解决你的问题,请参考以下文章

jsp_Scriptlet

jsp学习之scriptlet的使用方法

将锚标记中的值传递给另一个jsp

我可以将变量从我的 javascript 传递到 jsp 文件吗?

JAVA-JSP Scriptlets(JSP小脚本)

将变量从 JSP 传递到 Javascript