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?
Your javascript values are client-side, your scriptlet is running server-side. So if you want to use your javascript variables in a scriptlet, you will need to submit them. To achieve this, either store them in input fields and submit a form, or perform an ajax request.
No. It is not possible to have JSTL in HTML page.
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 %>
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
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With