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

1

32

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.

Luau answered 26/8, 2010 at 20:21 Comment(0)
S
46

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:

Stercoricolous answered 26/8, 2010 at 20:27 Comment(2)
Hmm, not only is that easier than ${pageContext.request.attribute.list}, but it works, too. Thanks much.Luau
You're welcome. I added a bit more detail so that you at least understand what it is doing under the covers :)Stercoricolous

© 2022 - 2024 — McMap. All rights reserved.