37

以下代码会导致错误:

<c:set var="test" value="test1"/>
<%
    String resp = "abc"; 
    resp = resp + ${test};  //in this line I got an  Exception.
    out.println(resp);
%>

为什么我不能在 scriptlet 中使用表达式语言“${test}”?

4

2 回答 2

67

JSTL变量实际上是属性,默认情况下在页面上下文级别范围内。
因此,如果您需要访问 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);
  %>  

但是为什么那个例外来找我。

JSP scriptlet用于包含对页面中使用的脚本语言有效的任何代码片段。scriptlet 的语法如下:

<%
   scripting-language-statements
%>

当脚本语言设置为 Java 时,scriptlet 被转换为 Java 编程语言语句片段,并插入到 JSP 页面的 servlet 的服务方法中。

在 scriptlet 中,您可以编写 Java 代码而${test}不是 Java 代码。


不相关的

于 2013-11-06T09:15:57.823 回答
1

您的 scriptlet 代码(内部<% %>)的内容是要放入已翻译 servlet 的服务方法(JSP 被翻译成 servlet 类)中的 java 语言代码片段。只有有效的 java 语法可以放在那里,所以你不能使用表达式语言。如果你想在 JSP 中附加两个字符串,如果第一个是常量“abc”,第二个是一些 EL 的值,你可以简单地使用

abc${test}

如果要将结果存储到脚本变量中,请遵循 Aniket 的答案(尽管我的建议是完全避免编写脚本)。

于 2013-11-06T09:31:12.563 回答