私のアプリケーションでJSFフレームワークを使用しています。私はフェーズリスナークラスのレンダリング応答フェーズの前に特定のスクリプトを実行する必要があります。Ajaxリクエストと通常のHttpリクエストとを区別する方法は?
トリガーされたリクエストがAjaxリクエストであれば、スクリプトを実行する必要があります。トリガーされたリクエストがHttpリクエストの場合、そのスクリプトを実行しないでください。
誰でもリクエストを差別化するのに手伝ってください。
私のアプリケーションでJSFフレームワークを使用しています。私はフェーズリスナークラスのレンダリング応答フェーズの前に特定のスクリプトを実行する必要があります。Ajaxリクエストと通常のHttpリクエストとを区別する方法は?
トリガーされたリクエストがAjaxリクエストであれば、スクリプトを実行する必要があります。トリガーされたリクエストがHttpリクエストの場合、そのスクリプトを実行しないでください。
誰でもリクエストを差別化するのに手伝ってください。
通常、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をRFを使用している場合、 ( "AJAXREQUEST")== null'も動作します –
はい、実装/ライブラリ固有のパラメータ/属性をフックすることもできますが、コードを特定の実装/ライブラリに強く連結することができます。 – BalusC
私はheaders.get( "X-Requested-With")を試しましたが、nullオブジェクトを返しました。 –
Ajaxリクエストでサーバー変数X-Requested-With
をXMLHttpRequest
に設定しました。この情報を使用して、ajaxリクエストと通常リクエストを区別できます。
private boolean isAjaxRequest() {
PartialViewContext partialViewContext = FacesContext.getCurrentInstance().getPartialViewContext();
return null != partialViewContext && partialViewContext.isAjaxRequest();
}
参考になります。http://stackoverflow.com/questions/216173/differentiating-between-an-ajax-call-browser-request – SuperSaiyan