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

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

Ответы [ 4 ]

2 голосов
/ 14 ноября 2008

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

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

Но не это:

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

Или это:

<form action="<%=pageContext.request.requestURI%>">
1 голос
/ 14 ноября 2008

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

public class YourTag extends TagSupport {
    public int doStartTag() throws JspException {
        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
        String pathInfo = req.getPathInfo();
1 голос
/ 13 ноября 2008

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

0 голосов
/ 14 ноября 2008

Объект запроса доступен в теге. Неважно, используете ли вы файл класса или тега. В файлах тегов он доступен как в скриплетах 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()

...