2011-09-15 12 views
9

में पूर्ण अनुरोधों से AJAX अनुरोधों को अलग करें मेरे सत्यापनकर्ता को यह जानने की आवश्यकता है कि यह एक पूर्ण अनुरोध या AJAX अनुरोध है या नहीं। मेरे वर्तमान समाधान में मैं X-Requested-With तत्व के लिए HTTP अनुरोध हेडर की जाँच करें:जेएसएफ कस्टम सत्यापनकर्ता

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 
     } 
     ... 
} 

वहाँ एक बेहतर दृष्टिकोण इस लक्ष्य को हासिल करने के लिए है? क्या मेरा समाधान अलग-अलग ब्राउज़र/जावास्क्रिप्ट libs के संबंध में "सुरक्षित" है?

अद्यतन:

बस पता चला कि एक्स-अनुरोधित-साथ हैडर ही मौजूद है, तो ajax अनुरोध Primefaces घटक पुस्तकालय (<p:ajax> टैग) से आता है।

यह मौजूद नहीं है यदि मैं सादा JSF <f:ajax> का उपयोग करता हूं। तो मेरा दृष्टिकोण<f:ajax> के साथ काम नहीं करेगा।

<f:ajax> का उपयोग करते हुए एक अलग शीर्षक है:

Faces-Request:partial/ajax 

समाधान OSW द्वारा प्रस्तावित के लिए <f:ajax>और<p:ajax> काम करता है:

PartialViewContext#isAjaxRequest()

उत्तर

14

मैं HTTP हेडर पर भरोसा नहीं होता। कभी अपने आप से यह कोशिश की, लेकिन आप निम्न कर सकता है:

PartialViewContext pvc = facesContext.getPartialViewContext(); 
if(pvc.isAjaxRequest()) { 
// ... 
} else { 
// ... 
} 

एक अन्य विकल्प के बजाय isAjaxRequest()

+0

आपके उत्तर के लिए धन्यवाद। बढ़िया है। क्या आप जानते हैं कि विधि क्या करती है? शायद हेडर के लिए भी जांच करता है। –

+0

@ मैट, क्षमा करें, यह नहीं पता कि यह वास्तव में क्या करता है, लेकिन विकल्प हेडर की जांच कर रहे हैं या अनुरोध पैरामीटर मानचित्र की जांच कर रहे हैं। – Osw

+0

मेरा प्रश्न अपडेट किया गया। ऐसा लगता है कि मेरा समाधान सुरक्षित नहीं है। –

1

मैं चाहते यह एक विश्वसनीय तरीका है कि इसे जांचने के लिए। यह ठीक है, उदाहरण के लिए Django AJAX अनुरोध के लिए जाँच करता है कि कैसे:

def is_ajax(self): 
     return self.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' 

इसके अलावा इस तरह के रूप यहाँ सूचीबद्ध: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

+0

अपने जवाब के लिए धन्यवाद isPartialRequest() उपयोग कर रहा है। मेरे सवालों को अपडेट किया गया। ऐसा लगता है कि मेरा समाधान सुरक्षित नहीं है। –

संबंधित मुद्दे