mac*_*ost 11 java jsp jsp-tags el
如果我做:
<% pageContext.setAttribute("foo", "bar"); %>
<custom:myTag/>
Run Code Online (Sandbox Code Playgroud)
好像我应该能做到:
<%= pageContext.getAttribute("foo") %>
Run Code Online (Sandbox Code Playgroud)
在myTag.tag内...但当然我不能,因为标签文件无法访问pageContext(相反它可以访问jspContext ...它与调用页面没有相同的属性pageContext中).
现在,您可以通过ELScript访问pageContext:
${pageContext}
Run Code Online (Sandbox Code Playgroud)
但这没有用,因为ELScript无法传递参数,所以你不能这样做:
${pageContext.getAttribute("foo")}
Run Code Online (Sandbox Code Playgroud)
但是,ELscript可以访问页面上下文的事实,以及标记可以访问各种变量(如jspContext)这一事实,标记必须有一些方法才能访问(以scriptlet/Java逻辑方式,而不仅仅是ELScript)来自调用JSP的pageContext的属性.
在那儿?
至于EL,${pageContext.getAttribute("foo")}仅在EL 2.2中有效.在此之前,正确的语法是${pageContext.foo}或只是${foo}.另请参阅我们的EL维基页面.
但是,${pageContext}父JSP文件和JSP标记之间不共享.每个都有自己的实例.
您可以将其设置为请求属性:
<% request.setAttribute("foo", "bar") %>
<custom:myTag />
Run Code Online (Sandbox Code Playgroud)
在标签中
<%= request.getAttribute("foo") %>
Run Code Online (Sandbox Code Playgroud)
或者,用EL
${requestScope.foo}
Run Code Online (Sandbox Code Playgroud)
要么
${foo}
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,您可以将其作为一个完整的标记属性传递
<custom:myTag foo="bar" />
Run Code Online (Sandbox Code Playgroud)
在标签中
<%@attribute name="foo" required="true" %>
${pageContext.foo}
Run Code Online (Sandbox Code Playgroud)
要不就
<%@attribute name="foo" required="true" %>
${foo}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18572 次 |
| 最近记录: |