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);
%>
Don't I use the expression language "${test}" in the scriptlet.why?
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);
%>
Update
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
- How to avoid Java Code in JSP-Files?
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).