2011-02-03 13 views
10

私のアプリケーションでJSFフレームワークを使用しています。私はフェーズリスナークラスのレンダリング応答フェーズの前に特定のスクリプトを実行する必要があります。Ajaxリクエストと通常のHttpリクエストとを区別する方法は?

トリガーされたリクエストがAjaxリクエストであれば、スクリプトを実行する必要があります。トリガーされたリクエストがHttpリクエストの場合、そのスクリプトを実行しないでください。

誰でもリクエストを差別化するのに手伝ってください。

+0

参考になります。http://stackoverflow.com/questions/216173/differentiating-between-an-ajax-call-browser-request – SuperSaiyan

答えて

17

通常、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")); 
+0

あなたは 'その後、request.getParameterをRFを使用している場合、 ( "AJAXREQUEST")== null'も動作します –

+0

はい、実装/ライブラリ固有のパラメータ/属性をフックすることもできますが、コードを特定の実装/ライブラリに強く連結することができます。 – BalusC

+1

私はheaders.get( "X-Requested-With")を試しましたが、nullオブジェクトを返しました。 –

4

Ajaxリクエストでサーバー変数X-Requested-WithXMLHttpRequestに設定しました。この情報を使用して、ajaxリクエストと通常リクエストを区別できます。

3
private boolean isAjaxRequest() { 
    PartialViewContext partialViewContext = FacesContext.getCurrentInstance().getPartialViewContext(); 
    return null != partialViewContext && partialViewContext.isAjaxRequest(); 
} 
関連する問題