【发布时间】:2011-06-20 15:07:42
【问题描述】:
我在我的应用程序中使用 JSF 框架。我需要在我的 Phase Listener 类中的渲染响应阶段之前运行特定的脚本。
运行此脚本的条件是,如果触发的请求是 Ajax 请求我需要运行脚本,如果触发的请求是 Http 请求我不应该运行该脚本。
谁能帮我区分收到的请求吗?
【问题讨论】:
标签: java javascript ajax jsf
我在我的应用程序中使用 JSF 框架。我需要在我的 Phase Listener 类中的渲染响应阶段之前运行特定的脚本。
运行此脚本的条件是,如果触发的请求是 Ajax 请求我需要运行脚本,如果触发的请求是 Http 请求我不应该运行该脚本。
谁能帮我区分收到的请求吗?
【问题讨论】:
标签: java javascript ajax jsf
private boolean isAjaxRequest() {
PartialViewContext partialViewContext = FacesContext.getCurrentInstance().getPartialViewContext();
return null != partialViewContext && partialViewContext.isAjaxRequest();
}
【讨论】:
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"));
【讨论】:
request.getParameter("AJAXREQUEST")==null 也可以使用
System.out.println(headers); 看到他们。
Ajax 请求将服务器变量 X-Requested-With 设置为 XMLHttpRequest。您可以使用该信息来区分 ajax 和普通请求。
【讨论】: