0

我正在使用 JSP 2 标记文件编写自定义 JSP 标记。在我的标签内,我想知道哪个页面调用了标签以构建 URL。如果不通过属性,这可能吗?

4

4 回答 4

2

事实证明,请求对象实际上是可用的,但仅在标签的 EL 部分中。所以这会起作用:

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

但不是这个:

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

或这个:

<form action="<%=pageContext.request.requestURI%>">
于 2008-11-13T21:42:47.840 回答
1

我认为在标记代码中,您可以检查请求对象及其 url,并从中确定页面。

于 2008-11-13T03:41:16.077 回答
1

可以通过pageContext成员变量从标记文件中访问请求。

public class YourTag extends TagSupport {
    public int doStartTag() throws JspException {
        HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
        String pathInfo = req.getPathInfo();
于 2008-11-13T22:05:50.757 回答
0

请求对象在标签中可用。使用类还是标签文件都没有关系。在标记文件中,它在 Java scriptlet 和 EL 中都可用。但是,它可以作为 ServletRequest 对象而不是 HttpServletRequest 对象使用(在 EL 中,对象的类无关紧要,但在 scriptlet 中确实如此)。

此外,在您的 scriptlet 中,您需要访问完整的方法,而不仅仅是属性名称。所以你的代码应该是:

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

但即使这样也行不通,因为 getRequestURI() 是 HttpServletRequest [1] 的方法,而不是 ServletRequest 的方法。因此,要么使用 EL,要么在标记文件中使用更长的 scriptlet 并转换请求对象。

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

于 2008-11-14T05:45:55.057 回答