2011-02-03 28 views
10

Estoy usando el marco JSF en mi aplicación. Necesito ejecutar un script específico antes de la fase de respuesta de render en mi clase Phase Listener.¿Cómo diferenciar las solicitudes de Ajax de las solicitudes Http normales?

La condición para ejecutar este script es que, si la solicitud activada es una solicitud Ajax, necesito ejecutar el script, si la solicitud activada es una solicitud Http, no debería ejecutar ese script.

¿Alguien me puede ayudar a diferenciar las solicitudes recibidas?

+0

pueden ser de interés: http://stackoverflow.com/questions/216173/differentiating-between-an-ajax-call-browser-request – SuperSaiyan

Respuesta

17

Las solicitudes Ajax generalmente tienen un encabezado de solicitud X-Requested-With: XMLHttpRequest. En JSF, puede obtener los encabezados de solicitud por ExternalContext#getRequestHeaderMap().

ExternalContext externalContext = facesContext.getExternalContext(); 
Map<String, String> headers = externalContext.getRequestHeaderMap(); 
boolean ajax = "XMLHttpRequest".equals(headers.get("X-Requested-With")); 
+0

si está utilizando la radiofrecuencia, 'request.getParameter ("AJAXREQUEST") == null' también funcionará –

+0

Sí, también puede enganchar parámetros/atributos específicos de la biblioteca/implementación, pero eso ajusta su código a implementaciones/bibliotecas específicas. – BalusC

+1

intenté headers.get ("X-Requested-With") pero devolvió el objeto nulo. !!!! –

4

Las solicitudes Ajax establecen una variable de servidor X-Requested-With en XMLHttpRequest. Puede usar esa información para diferenciar entre ajax y las solicitudes normales.

3
private boolean isAjaxRequest() { 
    PartialViewContext partialViewContext = FacesContext.getCurrentInstance().getPartialViewContext(); 
    return null != partialViewContext && partialViewContext.isAjaxRequest(); 
} 
Cuestiones relacionadas