我正在使用JSP 2标记文件编写自定义JSP标记。在我的标签内部,我想知道哪个页面称为标签以构建URL。这是否可以通过属性传递它?
答案 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()