我可以将变量从 JSP 脚本传送到 JSTL,但不能从 JSTL 传递到 JSP 脚本小工具,而不会出现错误

2022-08-31 17:47:40

下面的代码会导致错误:

 <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'".

如何从 JSTL 代码传递到 JSP 脚本?test


答案 1

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

相反,JSTL 完全使用作用域属性,可以是 在 或 作用域。您需要重新设计脚本以将其作为属性进行筛选:pagerequestsessiontest

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

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


答案 2

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

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

或者,如果 是从另一个名为 的作用域变量获取的,则执行:abc${resp}

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