Accessing a JSTL / EL variable inside a Scriptlet
Asked Answered
T

2

39

The following code causes an error:

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

Why can't I use the expression language "${test}" in the scriptlet?

Terzetto answered 6/11, 2013 at 8:27 Comment(1)
You can also use <jsp:useBean id="test" type="java.lang.String" scope="page|request|etc"> to bring an attribute into a local variable 'test' which you can now use freely in scriptletCassidy
I
69

JSTL variables are actually attributes, and by default are scoped at the page context level.
As a result, if you need to access a JSTL variable value in a scriptlet, you can do so by calling the getAttribute() method on the appropriately scoped object (usually pageContext and request).

resp = resp + (String)pageContext.getAttribute("test"); 

Full code

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

But why that exception come to me.

A JSP scriptlet is used to contain any code fragment that is valid for the scripting language used in a page. The syntax for a scriptlet is as follows:

<%
   scripting-language-statements
%>

When the scripting language is set to Java, a scriptlet is transformed into a Java programming language statement fragment and is inserted into the service method of the JSP page’s servlet.

In scriptlets you can write Java code and ${test} in not Java code.


Not related

Ieyasu answered 6/11, 2013 at 9:15 Comment(2)
this is ok, but ${test} also gets the value from the page scope. But why that exception come to me.Terzetto
pageContext.getAttribute getAttribute method doesn't existMaynord
F
1

The content of your scriptlet code (inside <% %>) is java language code snippet to be put into the translated servlet's service method (JSPs are translated into servlet classes). Only valid java syntax can be put there, so you cannot use expression language. If you want to append two strings in JSP, were the first one is constant "abc" and the second is value of some EL, you can simple use

abc${test}

If you want to store the result into scripting variable, follow the answer from Aniket (although my advice is to avoid scripting at all).

Fuss answered 6/11, 2013 at 9:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.