<document>

EL Variables come from one of two places:

1. implicit variable <deftable>
   pageContext
   pageScope
   requestScope
   sessionScope
   applicationScope
   param
   paramValues
   header
   headerValues
   cookie
   initParam
   </deftable>
2. pageContext.findAttribute(varname)
   which is like getting the first of:
   - page.getAttribute(varname)
   - request.getAttribute(varname)
   - session.getAttribute(varname)
   - application.getAttribute(varname)

So if you have a variable like:

<example> <% boolean a = true; %> </example>

you have to store it as an attribute to make it available as an EL variable:

<example> <% boolean b = true; pageContext.setAttribute("b",new Boolean(b)); %> <c:if test="${b}"> b is TRUE </c:if> </example>

Here is an example that shows this a bit more:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <% boolean a = true; boolean b = true; pageContext.setAttribute("b",new Boolean(b)); boolean c = false; pageContext.setAttribute("c",new Boolean(c)); boolean param = true; pageContext.setAttribute("param",new Boolean(param)); %> <%-- this is false because 'a' is not findable by pageContext.findAttribute(varname) --%> <c:if test="${'${'}a}"> a is TRUE </c:if> <c:if test="${'${'}b}"> b is TRUE </c:if> <%-- this is false because 'c' was set to false --%> <c:if test="${'${'}c}"> c is TRUE </c:if> <%-- This is false because 'param' is an implicit variable which is used instead of pageContext.findAttribute("param") --%> <c:if test="${'${'}param}"> param is TRUE </c:if> <results> b is TRUE </results>
</document>