Здесь я изучил различные вопросы о taglibs и неявных объектах. Хотя во многих ответах представлены интересные идеи, мне не удалось найти ответ, прямо отвечающий на этот вопрос.
Итак, чтобы проиллюстрировать мою дилемму, скажем, у меня есть класс Java, который реализует интерфейс javax.servlet.jsp.tagext.Tag...
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, который предположительно мог бы предоставить их для меня, но, похоже, не делает этого.
Я действительно чувствую, что мне здесь не хватает чего-то базового, но я не могу понять, что это может быть. Может ли кто-нибудь пролить свет на это?