JSP 2 タグ ファイルを使用してカスタム JSP タグを作成しています。タグ内で、URL を作成するためにタグを呼び出したページを知りたいです。これは、属性を介して渡さずに可能ですか?
4 に答える
request オブジェクトが実際に利用可能であることが判明しましたが、タグの EL 部分でのみ利用可能です。したがって、これは機能します:
<form action="${pageContext.request.requestURI}">
しかし、これではありません:
<form action="<%=request.requestURI%>">
またはこれ:
<form action="<%=pageContext.request.requestURI%>">
タグ コード内で、リクエスト オブジェクトとその URL を調べて、そこからページを判断できると思います。
pageContext
メンバー変数を介して、タグ ファイル内からリクエストにアクセスすることができます。
public class YourTag extends TagSupport {
public int doStartTag() throws JspException {
HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
String pathInfo = req.getPathInfo();
request オブジェクトはタグで使用できます。クラスまたはタグ ファイルのどちらを使用するかは問題ではありません。タグ ファイルでは、EL だけでなく Java スクリプトレットでも使用できます。ただし、HttpServletRequest オブジェクトではなく、ServletRequest オブジェクトとして使用できます (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()