バリデーターはフルリクエストかajaxリクエストかを知る必要があります。私の現在のソリューションでは、私はX-Requested-With
要素のためのHTTPリクエストヘッダを確認してください。JSFカスタムバリデーターで完全なリクエストからajaxリクエストを区別する
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
if (req.getHeader("X-Requested-With") != null) {
// do something
} else {
// do something else
}
...
}
は、これを達成するためのより良い方法はありますか?私のソリューションは、さまざまなブラウザ/ javascriptライブラリに関して "安全"ですか?
UPDATE:
だけAJAXリクエストがPrimefacesコンポーネントライブラリ(<p:ajax>
タグ)から来る場合Xは、要求-WITHヘッダのみ存在することを見出しました。
プレーンなJSFを使用するとが存在しませんです。<f:ajax>
です。 私のアプローチは<f:ajax>
とは動作しません。 <f:ajax>
を使用して
は異なるヘッダーがあります:
Faces-Request:partial/ajax
OSWによって提案された解決策は<f:ajax>
と<p:ajax>
の作品:
PartialViewContext#isAjaxRequest()
あなたの答えをありがとう。いいですね。あなたはその方法が何をしているか知っていますか?たぶん、ヘッダだけをチェックすることもあります。 –
@Matt、申し訳ありませんが、正確に何をしているのかわかりませんが、オプションはヘッダーをチェックしているか、リクエストパラメータマップをチェックしています。 – Osw
私の質問が更新されました。私の解決策は安全ではないようです。 –