55

以下代码会导致错误:

 <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?

4

2 回答 2

114

脚本是嵌入在页面代码中的原始 java,如果您在脚本中声明变量,那么它们将成为嵌入在页面中的局部变量。

相反,JSTL 完全使用范围属性,无论是 atpage还是requestscope 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>,您会看到您可以指定scopepagerequestsession,并且默认为page.

更好的是,根本不要使用 scriptlet:它们会让婴儿耶稣哭泣。

于 2010-08-25T21:11:45.187 回答
15

@skaffman 把它钉牢了。他们每个人都生活在自己的环境中。但是,我不会考虑使用 scriptlet 作为解决方案。你想避开它们。如果您只想在 EL 中连接字符串,并且发现+运算符在 EL 中的字符串失败(这是正确的),那么只需执行以下操作:

<c:out value="abc${test}" />

或者,如果abc要从另一个名为 的范围变量中获取${resp},则执行以下操作:

<c:out value="${resp}${test}" />
于 2010-08-25T21:16:59.887 回答