JSFバッキングBean(マネージドBean、ウェルドBean、重要ではありません)では、クライアントを呼び出すことでコンテキストパスを取得できます
FacesContext ctx = FacesContext.getCurrentInstance();
String path = ctx.getExternalContext().getRequestContextPath();
これにより、/myapplication
など、クライアントが現在アクセスしているパスがわかります。 /home.faces
のような現在のpageを取得することもできますか?
通常、このために UIViewRoot#getViewId()
を使用します。
_String viewId = facesContext.getViewRoot().getViewId();
_
これはELでも次のように利用できます。
_#{view.viewId}
_
正確にこの値は、_<h:link outcome>
_や_<h:button outcome>
_などのナビゲーションケースの結果で再利用できます。
または、HttpServletRequest#getRequestURI()
を使用して、エンドユーザーが実際にブラウザのアドレスバーに表示しているものを取得することもできます。
_String uri = ((HttpServletRequest) externalContext.getRequest()).getRequestURI();
_
ELでも次のように利用できます。
_#{request.requestURI}
_
まさにこの値は_<h:outputLink value>
_またはプレーン_<a href>
_で再利用できます。ナビゲーションケースの結果として使用できないことに注意してください。
わかった、わかった
FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest();
// returns something like "/myapplication/home.faces"
String fullURI = servletRequest.getRequestURI();
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI();