访问scriptlet中的jstl变量

red*_*ddy 31 jsp jstl el scriptlet

以下代码导致错误:

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

我不是在scriptlet.why中使用表达式语言"$ {test}"吗?

Ani*_*rni 59

JSTL变量实际上是属性,默认情况下是在页面上下文级别.
因此,如果需要在scriptlet中访问JSTL变量值,可以通过getAttribute()在适当范围的对象上调用方法(通常pageContext和请求)来实现.

resp = resp + (String)pageContext.getAttribute("test"); 
Run Code Online (Sandbox Code Playgroud)

完整代码

 <c:set var="test" value="test1"/>
 <%
    String resp = "abc"; 
    resp = resp + (String)pageContext.getAttribute("test");   //No exception.
    out.println(resp);
  %>  
Run Code Online (Sandbox Code Playgroud)

更新

但为什么那个例外来找我.

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

<%
   scripting-language-statements
%>
Run Code Online (Sandbox Code Playgroud)

当脚本语言设置为java时,scriptlet将转换为Java编程语言语句片段,并插入到JSP页面的servlet的service方法中.

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


不相关的