我的驗證器需要知道它是完整請求還是ajax請求。在我目前的解決方案,我檢查HTTP請求頭爲X-Requested-With
元素:在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:
只要發現該X-請求-隨着頭只存在如果AJAX請求來自Primefaces組件庫(在<p:ajax>
標記)。
這是不是如果我使用普通JSF <f:ajax>
存在。 所以我的方法將不會與<f:ajax>
。
使用<f:ajax>
有不同的頁眉:
Faces-Request:partial/ajax
通過OSW提出的解決方案適用於<f:ajax>
和<p:ajax>
:
PartialViewContext#isAjaxRequest()
感謝您的回答。聽起來不錯。你知道這個方法做什麼嗎?也許只是檢查標題。 –
@Matt,對不起,不知道它做了什麼,但選項正在檢查標題或檢查請求參數映射。 – Osw
更新了我的問題。看起來我的解決方案不安全。 –