如果我这样做:
<% pageContext.setAttribute("foo", "bar"); %>
<custom:myTag/>
似乎我应该能够做到:
<%= pageContext.getAttribute("foo") %>
myTag.tag内...但当然我不能,因为标签文件无法访问pageContext(相反它可以访问jspContext ...它没有相同的属性调用页面的pageContext)。
现在,您可以通过ELScript访问pageContext:
${pageContext}
但这没有用,因为ELScript无法传递参数,所以你不能这样做:
${pageContext.getAttribute("foo")}
然而,ELscript可以访问页面上下文的事实,以及标签可以访问各种变量(如jspContext)这一事实,标签必须有某种方式才能访问(以scriptlet / Java逻辑方式,不仅仅是在ELScript中)来自调用JSP的pageContext的一个属性。
有吗?
答案 0 :(得分:7)
对于EL,${pageContext.getAttribute("foo")}
仅适用于EL 2.2。在此之前,正确的语法是${pageContext.foo}
或${foo}
。另请参阅我们的EL wiki page。
但是,父JSP文件和JSP标记之间不共享${pageContext}
。每个都有自己的实例。
您可以 将其设置为请求属性:
<% request.setAttribute("foo", "bar") %>
<custom:myTag />
带有标签
<%= request.getAttribute("foo") %>
或,与EL
${requestScope.foo}
或
${foo}
或,更好的是,您可以将其作为一个完整的标记属性传递
<custom:myTag foo="bar" />
带有标签
<%@attribute name="foo" required="true" %>
${pageContext.foo}
或只是
<%@attribute name="foo" required="true" %>
${foo}
答案 1 :(得分:1)
至少在WebLogic 10中,隐含的&#34;应用程序&#34; object 在标记文件中可用,并且是ServletContext的实例。也许使用它,当它真正是一个人的ServletContext,而不一定是更高级别的pageContext。