usando sigue servlet mvc entre diferencia java jsf servlets

java - sigue - Obtener la URL de solicitud en un bean JSF?



jsp servlet vs spring mvc (2)

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

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

Edición: Requisitos funcionales El requisito aquí es que necesitamos la URL completa para una utilidad de JavaScript de terceros. El uso o la arquitectura de la utilidad no encaja bien con JSF, pero todo lo que no sea esta llamada lo hace. El método que encontré funcionará, pero se sintió mal cavar tan profundamente en el FacesContext. Además, esperaba que hubiera una forma en la que se pudiera llamar con JSF Expression Language, ya que se usará en una forma relacionada con "vistas".


Si alguna vez necesita arrastrar la API de Servlet sin procesar desde debajo de los FacesContext JSF por FacesContext , entonces es probable que esté haciendo el trabajo en el lugar equivocado. ¿Cuál es el requisito funcional para el cual pensaste que esta es la solución correcta? ¿Es posible que no esté utilizando una clase de Servlet real o un Filter lugar de un bean administrado JSF? ¿O tal vez no necesita la URL de solicitud en absoluto porque hay mejores formas "jsfish" para lograr lo mismo?

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

Actualice según su edición: así que, ¿solo lo necesita después de todo en el lado de la vista? Por ejemplo, #{bean.requestURL} ? También puede simplemente HttpServletRequest objeto HttpServletRequest que ya está implícitamente disponible en EL.

Cuando estás en JSP:

${pageContext.request.requestURL}

O cuando estás en Facelets:

#{request.requestURL}

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

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

Si es así, también puedes tomar la window.location de window.location para eso.

var url = window.location;

No es necesario saturar el bean JSF con los detalles específicos de la vista.


Ya ha respondido :) Me temo que tendrá que usarlo de esa manera, ya que cada solicitud HTTP tendrá que recuperarse del contexto de las caras. Por supuesto, podría simplificar alguna parte de este método, como la recuperación del contexto de las caras, pero definitivamente es el camino a seguir, a menos que use algún tipo de marco que abstraiga esos detalles y le permita acceder directamente al objeto HttpRequest.

Saludos.