Как отличить запросы Ajax от обычных запросов Http?

Я использую фреймворк JSF в своем приложении. Мне нужно запустить конкретный script до этапа ответа рендеринга в моем классе Phase Listener.

Условие для запуска этого script заключается в том, что если инициированный запрос является запросом Ajax, мне нужно запустить script, если инициированный запрос является запросом Http, я не должен запускать этот script.

Кто-нибудь может помочь мне дифференцировать полученные запросы?

Ответ 1

Запросы Ajax обычно содержат заголовок запроса X-Requested-With: XMLHttpRequest. В JSF вы можете получить заголовки запросов ExternalContext#getRequestHeaderMap().

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

Ответ 2

Запросы Ajax устанавливают переменную сервера X-Requested-With на XMLHttpRequest. Вы можете использовать эту информацию, чтобы различать ajax и обычные запросы.

Ответ 3

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