



Я думаю, что в коде тега вы можете изучить объект запроса и его URL-адрес и определить страницу по нему.
Оказывается, объект запроса действительно доступен, но только в 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 ()
Объект запроса работал бы, если бы это была обычная страница JSP, но внутри файла тега объект запроса недоступен.