簡體   English   中英

如何訪問自定義taglib Java類中的JSP隱式對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM