Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing a JSTL / EL variable inside a Scriptlet

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?

like image 336
reddy Avatar asked Nov 06 '13 08:11

reddy


People also ask

How use Javascript variable in JSP scriptlet tag?

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.

Can we use JSTL tags in HTML?

No. It is not possible to have JSTL in HTML page.

What is scriptlet tag in JSP?

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 %>


2 Answers

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

  • How to avoid Java Code in JSP-Files?
like image 178
Aniket Kulkarni Avatar answered Sep 21 '22 13:09

Aniket Kulkarni


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).

like image 27
Kojotak Avatar answered Sep 20 '22 13:09

Kojotak