2010-07-15 29 views
54

En un bean de respaldo JSF (Managed Bean, Weld Bean, no importa), puedo obtener la ruta de contexto el cliente está en llamandoObtener página actual mediante programación

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

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

Respuesta

102

Normalmente se desea utilizar para este UIViewRoot#getViewId().

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

Esta se encuentra en El también disponible como sigue:

#{view.viewId} 

Exactamente este valor es reutilizable en el caso de navegación resultados como la <h:link outcome> y <h:button outcome>.


Como alternativa, también se puede utilizar para obtener HttpServletRequest#getRequestURI() cualquiera que sea el usuario final está viendo realmente en la barra de direcciones del navegador.

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

¿Qué es en El también disponible como sigue:

#{request.requestURI} 

Exactamente este valor es reutilizable en <h:outputLink value> o simple <a href>. Tenga en cuenta que no puede usarlo como resultado del caso de navegación.

+1

Esto no funciona de forma fiable. Con PrettyFaces, por ejemplo, esto no da la URL que se llamó para crear la página actual. – DoubleMalt

+1

@DoubleMalt: OP no indicó que esté usando PrettyFaces. – BalusC

+4

Si bien es cierto, tampoco declaró explícitamente que no lo hizo. Mi punto era simplemente que las bibliotecas que amplían JSF pueden romper su solución (y PrettyFaces es una mejora muy común ya que el manejo de la implementación estándar de navegación es bastante torpe). Solo quería darles a las personas que lo descubren, que su solución limpia no funciona para ellos, una pista de por qué. – DoubleMalt

12

Entendido, es

FacesContext ctx = FacesContext.getCurrentInstance(); 
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest(); 
// returns something like "/myapplication/home.faces" 
String fullURI = servletRequest.getRequestURI(); 
2
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI(); 
1
String str = ((HttpServletRequest) FacesContext.getCurrentInstance() 
.getExternalContext().getRequest()).getRequestURI(); 
System.out.println(str); 
+2

Por favor explique su respuesta en palabras también. –

+0

Esto no agrega nada a la (s) respuesta (s) anterior (es). – Robert

Cuestiones relacionadas