以下代码会导致错误:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + ${test}; //in this line I got an Exception.
out.println(resp);
%>
为什么我不能在脚本中使用表达式语言"${test}"?
JSTL 变量实际上是属性,默认情况下作用域在页面上下文级别。
因此,如果需要访问 scriptlet 中的 JSTL 变量值,可以通过在适当作用域的对象(通常为 pageContext
和请求)上调用 getAttribute()
方法来执行此操作。
resp = resp + (String)pageContext.getAttribute("test");
完整代码
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + (String)pageContext.getAttribute("test"); //No exception.
out.println(resp);
%>
但为什么这个例外会来找我。
JSP 脚本用于包含对页面中使用的脚本语言有效的任何代码片段。脚本的语法如下:
<%
scripting-language-statements
%>
当脚本语言设置为 Java 时,脚本将转换为 Java 编程语言语句片段,并插入到 JSP 页面的 servlet 的服务方法中。
在脚本中,您可以编写 Java 代码,${test}
不是 Java 代码。
不相关
- 如何避免JSP文件中的Java代码?
scriptlet 代码的内容(在 <% %>
内部)是 java 语言代码片段,要放入翻译后的 servlet 的服务方法中(JSP 被翻译成 servlet 类)。只能将有效的 Java 语法放在那里,因此不能使用表达式语言。如果你想在JSP中附加两个字符串,第一个是常量"abc",第二个是一些EL的值,你可以简单地使用
abc${test}
如果您想将结果存储到脚本变量中,请按照 Aniket 的答案进行操作(尽管我的建议是完全避免编写脚本)。