我正在使用 JSP 2 标记文件编写自定义 JSP 标记。在我的标签内,我想知道哪个页面调用了标签以构建 URL。如果不通过属性,这可能吗?
timdisney
问问题
5007 次
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 回答