How to pass java variables from scriptlets to c:when expression in jstl?

17,743

Variables in scriptlets cannot be seen in JSTL because Expression Language, the stuff between ${} used in JSTL, will look for attributes in page, request, session or application. You have to at least store the variable from scriptlet in one of these scopes, then use it.

This is an example:

<%
    boolean a = true;
    request.setAttribute("a", a);
%>

<c:if test="${a}">
    <c:out value="a was found and it's true." />
</c:if>

More info:


As a recommendation, stop using scriptlets. Move the business logic in your JSP to controller and the view logic into EL, JSTL and other tags like <display>. More info: How to avoid Java code in JSP files?

Share:
17,743
Peters_
Author by

Peters_

Updated on June 21, 2022

Comments

  • Peters_
    Peters_ almost 2 years

    what is a proper way to use variables from scriptlets in jstl? I don't know what is wrong in my code:

    <%
    boolean a = true;
    boolean b = false;
    %>
    
    <c:choose>
        <c:when test="${a}">
            <c:set var="x" value="It's true"/>
        </c:when>
        <c:when test="${b}">
            <c:set var="x" value="It's false"/>
        </c:when>
    
    </c:choose>
    

    It looks like it doesn't go into the whole block.