Obtenga la página actual programáticamente

En un bean de respaldo de JSF (Managed Bean, Weld Bean, no importa), puedo obtener la ruta de contexto en la que está el cliente llamando

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

Esto me da la ruta a la que el cliente accede actualmente, como /myapplication . ¿También es posible obtener la página actual, como /home.faces , y cómo?

Normalmente desea utilizar UIViewRoot#getViewId() para esto.

 String viewId = facesContext.getViewRoot().getViewId(); 

Esto está en EL también disponible de la siguiente manera:

 #{view.viewId} 

Exactamente este valor es reutilizable en resultados de casos de navegación tales como y .


Alternativamente, también puede usar HttpServletRequest#getRequestURI() para obtener lo que el usuario final esté viendo realmente en la barra de direcciones del navegador.

 String uri = ((HttpServletRequest) externalContext.getRequest()).getRequestURI(); 

Lo que está en EL también está disponible de la siguiente manera:

 #{request.requestURI} 

Exactamente este valor es reutilizable en o simple . Tenga en cuenta que no puede usarlo como resultado del caso de navegación.

Ok, lo tengo, es

 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(); 
  String str = ((HttpServletRequest) FacesContext.getCurrentInstance() .getExternalContext().getRequest()).getRequestURI(); System.out.println(str);