2011-02-03 35 views
10

Tôi đang sử dụng khung công tác JSF trong ứng dụng của mình. Tôi cần phải chạy một kịch bản cụ thể trước giai đoạn phản hồi kết xuất trong lớp List Listener của tôi.Làm thế nào để phân biệt các yêu cầu Ajax từ các yêu cầu Http bình thường?

Điều kiện để chạy tập lệnh này là nếu yêu cầu được kích hoạt là yêu cầu Ajax, tôi cần chạy tập lệnh, nếu yêu cầu được kích hoạt là yêu cầu Http tôi không nên chạy tập lệnh đó.

Có ai vui lòng giúp tôi phân biệt các yêu cầu đã nhận được không.?

+0

Có thể quan tâm: http://stackoverflow.com/questions/216173/differentiating-between-an-ajax-call-browser-request – SuperSaiyan

Trả lời

17

Yêu cầu Ajax thường có tiêu đề yêu cầu X-Requested-With: XMLHttpRequest. Trong JSF, bạn có thể nhận các tiêu đề yêu cầu theo số ExternalContext#getRequestHeaderMap().

ExternalContext externalContext = facesContext.getExternalContext(); 
Map<String, String> headers = externalContext.getRequestHeaderMap(); 
boolean ajax = "XMLHttpRequest".equals(headers.get("X-Requested-With")); 
+0

nếu bạn đang sử dụng RF sau đó 'request.getParameter ("AJAXREQUEST") == null' cũng sẽ hoạt động –

+0

Có, bạn cũng có thể móc vào các tham số/thuộc tính cụ thể/thực hiện thư viện, nhưng các cặp mã hóa chặt chẽ mã của bạn thành các triển khai/thư viện cụ thể. – BalusC

+1

tôi đã thử headers.get ("X-Requested-With") nhưng nó trả về đối tượng null. !!!! –

4

Yêu cầu Ajax đặt biến máy chủ X-Requested-With thành XMLHttpRequest. Bạn có thể sử dụng thông tin đó để phân biệt giữa ajax và các yêu cầu thông thường.

3
private boolean isAjaxRequest() { 
    PartialViewContext partialViewContext = FacesContext.getCurrentInstance().getPartialViewContext(); 
    return null != partialViewContext && partialViewContext.isAjaxRequest(); 
} 
Các vấn đề liên quan