web-dev-qa-db-ja.com

プログラムで現在のページを取得する

JSFバッキングBean(マネージドBean、ウェルドBean、重要ではありません)では、クライアントを呼び出すことでコンテキストパスを取得できます

FacesContext ctx = FacesContext.getCurrentInstance();
String path = ctx.getExternalContext().getRequestContextPath();

これにより、/myapplicationなど、クライアントが現在アクセスしているパスがわかります。 /home.facesのような現在のpageを取得することもできますか?

61
Ingo Fischer

通常、このために 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>_で再利用できます。ナビゲーションケースの結果として使用できないことに注意してください。

113
BalusC

わかった、わかった

FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest();
// returns something like "/myapplication/home.faces"
String fullURI = servletRequest.getRequestURI();
13
Ingo Fischer
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI();
3
Catfish