How to obtain request / session / servletcontext attribute in JSP using EL?

Eric Wilson picture Eric Wilson · Aug 26, 2010 · Viewed 37.8k times · Source

I know this isn't hard, but I'm not having any luck.

I want to make fooList from a Servlet available in a JSP. So in the Servlet I have:

request.setAttribute("list", fooList);
RequestDispatcher dispatcher = 
  getServletContext().getRequestDispatcher("/myJsp.jsp");
dispatcher.forward(request, response);

Then in the JSP, I want:

<c:forEach var="post" items="${SOME_EL_HERE}">
    <!-- stuff -->
</c:forEach>

Where SOME_EL_HERE is an expression that retrieves the attribute that I have set on the request.

Any thoughts? My preference is to not complicate a simple task by adding a framework, but I'm open to changes in strategy.

Answer

BalusC picture BalusC · Aug 26, 2010

It's just the attribute name as you've set yourself here:

request.setAttribute("list", fooList);

It's thus "list":

${list}

This works the same way for session.setAttribute("name", value) and application.setAttribute("name", value). The value is in EL available by just ${name}.


More detail: EL uses by default PageContext#findAttribute() which scans in subsequently the page, request, session and application scopes for the firstnext non-null attribute value matching the given attribute name.

If you'd like to explicitly specify the scope for the case that you've multiple attributes with the same name in different scopes, then normal approach is to use ${pageScope}, ${requestScope}, ${sessionScope} or ${applicationScope}. E.g.

${requestScope.list}

See also: