是否可以在jsp 2.0自定义标记内获取调用页面名称?

时间:2008-11-12 19:39:16

标签: java jsp jsp-tags

我正在使用JSP 2标记文件编写自定义JSP标记。在我的标签内部,我想知道哪个页面称为标签以构建URL。这是否可以通过属性传递它?

4 个答案:

答案 0 :(得分:2)

事实证明,请求对象实际上是可用的,但仅限于标记的EL部分。所以这会奏效:

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

但不是这样:

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

或者这个:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分: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()