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