Can a JSP tag file access its calling JSP's PageContext?

19,276

Solution 1

As to EL, the ${pageContext.getAttribute("foo")} works in EL 2.2 only. Before that the right syntax is ${pageContext.foo} or just ${foo}. See also our EL wiki page.

However, the ${pageContext} isn't shared between the parent JSP file and the JSP tag. Each has its own instance.

You could either set it as request attribute instead:

<% request.setAttribute("foo", "bar") %>
<custom:myTag />

with in the tag

<%= request.getAttribute("foo") %>

or, with EL

${requestScope.foo}

or

${foo}

Or, better, you could pass it as a fullworthy tag attribute

<custom:myTag foo="bar" />

with in the tag

<%@attribute name="foo" required="true" %>
${pageContext.foo}

or just

<%@attribute name="foo" required="true" %>
${foo}

Solution 2

Looks like in WebLogic 10 at least, the implicit "application" object is available in tag files, and is instanceof ServletContext. Maybe use this, when it's really the ServletContext that one is after, and not necessarily the higher-level pageContext.

Share:
19,276

Related videos on Youtube

machineghost
Author by

machineghost

Living proof that (some) humanities majors can program. SOreadytohelp Note to Recruiters: While I live in Mountain View I am only looking for remote positions at this time (not positions in the Bay Area).

Updated on June 05, 2022

Comments

  • machineghost
    machineghost about 2 years

    If I do:

    <% pageContext.setAttribute("foo", "bar"); %>
    <custom:myTag/>
    

    it seems like I should be able to do:

    <%= pageContext.getAttribute("foo") %>
    

    inside of myTag.tag ... but of course I can't because the tag file doesn't have access to the pageContext (instead it has access to a jspContext ... which doesn't have the same attributes as the calling page's pageContext).

    Now, you can access the pageContext via ELScript:

    ${pageContext}
    

    but that doesn't help because ELScript has no way of passing arguments, so you can't do:

    ${pageContext.getAttribute("foo")}
    

    However, the fact that ELscript can accesss the page context, and the fact that the tag can access all sorts of variables like jspContext, that there must be some way for a tag to access (in a scriptlet/Java logic way, not just in ELScript) an attribute from the calling JSP's pageContext.

    Is there?