[英]How do I access JSP implicit objects inside custom taglib Java classes?
我在這里研究了關於taglib和隱含對象的各種問題。 雖然許多答案都提出了有趣的想法,但我找不到直接回答這個問題的答案。
為了說明我的困境,我說有一個實現javax.servlet.jsp.tagext.Tag接口的Java類......
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
class MyTag implements Tag {
private PageContext _pageContext;
public void setPageContext(PageContext pageContext) {
_pageContext = pageContext;
}
.
.
.
這使我可以訪問PageContext對象,該對象提供了有關調用JSP的一些有用信息。 問題是,PageContext似乎沒有提供對許多JSP的實際隱式對象的訪問...
.
.
.
public int doEndTag() throws JspException {
ServletRequest req = _pageContext.getRequest();
.
.
.
return EVAL_PAGE;
}
上面描述的ServletRequest對象與HttpServletRequest完全不同,HttpServletRequest由JSP本身中的隱式對象“request”實現。 這使得在我的類中調用像HttpServletRequest.getRequestURI()這樣的方便的方法是有問題的。
因此,通過閱讀這里的其他幾個問題的答案,我留下的印象是沒有開箱即用的方式來獲取實際的隱含對象。 我要么必須在JSP中明確地將它們作為自定義標記的屬性傳遞...
<mc:mytag request="<%=request%>"/>
......或許它們存儲在其他一些隱含的對象我有機會獲得的哈希...
<% session.setAttribute("request", request); %>
哪個,如果是真的,自然會引出我的問題...... 你是不是在開玩笑吧? 必須有一些我在這里缺少的關鍵。 在我的自定義taglib類中,訪問JSP的隱式對象似乎是一件相當普遍的事情。 每次我需要這些步驟時都必須采取這些步驟,這讓我感到非常愚蠢 - 特別是當我被傳遞給像我這樣可能為他提供的PageContext對象時,但似乎沒有。
我真的覺得我在這里缺少一些基本的東西,但我不能為我的生活找出可能的東西。 有人可以對此有所了解嗎?
PageContext
確實允許您訪問當前的HttpServletRequest
,您只需要將其HttpServletRequest
轉換:
HttpServletRequest req = (HttpServletRequest )_pageContext.getRequest();
這不是很好,但可以追溯到人們認為有一天可能會在Servlet API中出現非HTTP內容的時候。
至於術語“隱式對象”的使用,這僅在JSP頁面本身的上下文中有意義。 除此之外,這個詞沒有任何意義。 表示當前HttpServletRequest
的“隱式對象”與從PageContext
獲取的對象相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.