访问scriptlet中的jstl变量

时间:2013-11-06 08:27:19

标签: 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);
       %>

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

2 个答案:

答案 0 :(得分:58)

  

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代码中编写Java代码和${test}


不相关

答案 1 :(得分:0)

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

abc${test}

如果要将结果存储到脚本变量中,请按照Aniket的回答(尽管我的建议是避免编写脚本)。