我在這裏檢查了關於taglibs和隱式對象的各種問題。雖然許多答案提出了有趣的想法,但我一直無法找到直接回答這個問題的答案。如何訪問自定義taglib Java類中的JSP隱式對象?
所以來說明我的困境,說我有一個實現了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的完全不同,這是由隱對象實現「請求「在JSP本身。這使得在我的類中調用像HttpServletRequest.getRequestURI()這樣的方便方法存在問題。
因此,通過閱讀其他幾個問題的答案,我留下了一個印象,即沒有獲取實際隱式對象的開箱即用方式。我要麼必須明確地傳遞他們作爲我的JSP定製標記的屬性...
<mc:mytag request="<%=request%>"/>
...或許它們存儲在其他一些隱含對象的哈希我做訪問.. 。
<% session.setAttribute("request", request); %>
其中,如果是真的,自然會導致我的問題... 你受詛咒跟我開玩笑吧?有一些關鍵,我在這裏失蹤。訪問JSP的隱式對象看起來像是我想要在自定義taglib類中這樣一個相當普遍的事情。這讓我感到非常不方便,因爲每次我需要時都要採取這樣的步驟 - 尤其是當我傳遞像PageContext對象這樣的東西時,可能會爲我提供這些對象,但似乎沒有。
我真的覺得我在這裏失去了一些基本的東西,但我不能爲了我的生活找出可能的東西。有人可以對此有所瞭解嗎?
[*桌子上的劉海頭*] gahh!我知道我錯過了一些基本的東西:HttpServerRequest擴展了ServerRequest。應該看到它。謝謝你的迴應,skaffman! – Syndog 2010-11-12 15:01:52
是的,「隱式對象」在JSP本身內部只有意義。我想知道我說的是什麼啓發你指出......? – Syndog 2010-11-12 15:20:18