2010-07-21 8 views
18

¿Cómo se obtiene la URL de solicitud en un bean que respalda una página JSF? He estado buscando a través de los documentos FacesContext y la mejor manera que pude encontrar parece terriblemente largo:¿Recibe la URL de la solicitud en un frijol JSF?

public String getRequestURL() 
{ 
    Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    if(request instanceof HttpServletRequest) 
    { 
      return ((HttpServletRequest) request).getRequestURL().toString(); 
    }else 
    { 
     return ""; 
    } 
} 

Editar: Requisitos funcionales El requisito aquí es que necesitamos la URL completa de un tercero Javascript utilidad. El uso o la arquitectura de la utilidad no encaja bien con JSF, pero todo lo que haga falta es esta llamada. El método que encontré funcionará, pero se sintió mal cavar tan profundamente en FacesContext. Además, esperaba que hubiera una manera de llamarlo con JSF Expression Language, ya que se usará de una manera "ver".

Respuesta

28

Si alguna vez necesita transportar la API de Servlet sin procesar de debajo de las cubiertas JSF por el FacesContext, entonces es probable que esté haciendo el trabajo en el lugar equivocado. ¿Qué es, el requisito funcional por el que pensaste que esta es la solución correcta? ¿Debería no estar utilizando una clase real Servlet o Filter en lugar de un bean gestionado JSF? ¿O tal vez no necesita la URL de solicitud en absoluto porque hay mejores formas de "jsfish" para lograr lo mismo?

Si actualiza su pregunta para incluir los detalles sobre el requisito funcional, entonces podremos sugerirle la solución correcta.


actualización como por su edición: así, sólo se necesita después de todo en el lado de la vista? P.ej. #{bean.requestURL}? También puede tomarlo del objeto HttpServletRequest que ya está disponible implícitamente en EL.

Cuando estás en JSP:

${pageContext.request.requestURL} 

O cuando estás en Facelets:

#{request.requestURL} 

Y ahora, ¿cómo lo necesita JavaScript? Imprimir como una variable de JavaScript? ¿Al igual que?

var url = '#{request.requestURL}'; 

Si es así, usted podría también tomar sólo window.location para eso.

var url = window.location; 

No hay necesidad de ocupar el frijol JSF con la vista detalles específicos.

+0

¡Gracias por aclarar todos los diversos métodos de extracción! – Adam

+0

De nada. ¿Cuál finalmente ayudó? :) – BalusC

+0

Pude solucionar el problema al final, pero hubiera usado window.location – Adam

3

Ya tiene la respuesta :) Me temo que tendrá que usarlo de esa manera, ya que cada solicitud HTTP tendrá que ser recuperada del contexto de rostros. Podría, por supuesto, simplificar alguna parte de este método, como la recuperación del contexto de rostros, pero definitivamente es el camino a seguir, a menos que use algún tipo de marco que abstraiga esos detalles y le permita llegar al Objeto HttpRequest directamente.

Atentamente.

Cuestiones relacionadas