在Scriptlet中访问一个JSTL EL变量。

问题描述 投票:32回答:2

下面的代码导致了一个错误,为什么我不能在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}"?

jsp jstl el scriptlet
2个回答
60
投票

脚本小程序中不能使用表达式语言"${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代码。


不相关


1
投票

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

abc${test}

如果你想把结果存储到脚本变量中,请按照Aniket的答案(尽管我的建议是完全避免脚本)。

© www.soinside.com 2019 - 2024. All rights reserved.