Можно ли получить имя вызывающей страницы внутри пользовательского тега jsp 2.0?

Я пишу собственный тег JSP, используя файлы тегов JSP 2. Внутри моего тега я хотел бы знать, какая страница вызвала этот тег для создания URL-адресов. Возможно ли это без передачи через атрибут?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
4 955
4

Ответы 4

Я думаю, что в коде тега вы можете изучить объект запроса и его URL-адрес и определить страницу по нему.

Объект запроса работал бы, если бы это была обычная страница JSP, но внутри файла тега объект запроса недоступен.

timdisney 13.11.2008 19:59

Оказывается, объект запроса действительно доступен, но только в EL-части тега. Итак, это сработает:

<form action = "${pageContext.request.requestURI}">

Но не это:

<form action = "<%=request.requestURI%>">

Или это:

<form action = "<%=pageContext.request.requestURI%>">

Доступ к запросу можно получить из файла тегов через переменную-член pageContext.

public class YourTag extends TagSupport {
    public int doStartTag() throws JspException {
        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
        String pathInfo = req.getPathInfo();

Объект запроса доступен в теге. Не имеет значения, используете ли вы класс или файл тегов. В файлах тегов он доступен как в сценариях Java, так и в EL. Однако он доступен как объект ServletRequest, а не как объект HttpServletRequest (в EL класс объекта не имеет значения, но имеет значение в скриптлетах).

Кроме того, в ваших скриптлетах вам необходимо получить доступ к полному методу, а не только к имени свойства. Итак, ваш код должен быть:

<form action = "<%= pageContext.getRequest().getRequestURI() %>">

но даже это не сработает, потому что getRequestURI () - это метод HttpServletRequest [1], а не ServletRequest. Так что либо используйте EL, либо используйте более длинные скриптлеты в вашем файле тегов и приведите объект запроса.

[1] http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html#getRequestURI ()

Другие вопросы по теме