开发者

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

开发者 https://www.devze.com 2023-03-29 00:26 出处:网络
If I do: <% pageContext.setAttribute(\"foo\", \"bar\"); %> <custom:myTag/> it seems like I should be able to do:

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")}

Howev开发者_运维百科er, 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?


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}


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号