2012-09-22 15 views
7

मैं JSF 2 का उपयोग कर रहा PrettyFaces साथ और भी <h:link> और <f:param> टैग बड़े पैमाने पर बुकमार्क योग्य पृष्ठों पाने के लिए के साथ रिफ्रेशिंग यूआरएल (यह अंत में एक JSF आवेदन में उन सभी पोस्ट अनुरोध के बारे में भूल करने के लिए बहुत अच्छा है)।JSF ajax अनुरोध

हालांकि, इनमें से कुछ लिंक केवल पृष्ठ के एक छोटे से हिस्से को बदलते हैं (मुख्य रूप से जब उपयोगकर्ता एक ही दृश्य में रहता है), तो इसके बजाय AJAX अनुरोध भेजने के लिए अच्छा है। हालांकि, <f:ajax> का उपयोग <h:link>, <h:commandlink> के साथ नहीं किया जा सकता है। मैं पैरामीटर को कमांडलिंक के साथ कई तरीकों से भी भेज सकता हूं, लेकिन इस मामले में यूआरएल अनुरोध के बाद ही रहता है। तो यह पृष्ठ की सामग्री के साथ सिंक हो जाता है, और यह ताज़ा नहीं है।

मैं साइटों कि लिंक है कि प्राप्त और ajax अनुरोध (जबकि ajax के साथ पेज को संशोधित करने के लिए एक नया यूआरएल की ओर इशारा करते) का एक मिश्रण की तरह भेजने का उपयोग करें, लेकिन अभी तक मैं किसी भी समाधान नहीं मिला है देखा है।

क्या मैं किसी भी तरह AJAX अनुरोध समाप्त होने के बाद जेएसएफ के साथ यूआरएल रीफ्रेश कर सकता हूं (या जब उपयोगकर्ता क्लिक करता है)? या मुझे कुछ बाहरी जेएस लाइब्रेरी का उपयोग करना है?

संपादित: जे एस पुस्तकालय है कि यहाँ की जरूरत है नए जावास्क्रिप्ट इतिहास एपीआई है। More info. मुझे लगता है कि जेएसएफ वर्तमान में इस एपीआई का उपयोग नहीं करता है। लेकिन मुझे अभी भी जेएसएफ डेवलपर के दृष्टिकोण से इस मुद्दे में दिलचस्पी है।

इसके अलावा, क्या यह जेएसएफ की भावी रिलीज के लिए योजनाबद्ध है? <h:link> के साथ संयोजन एक सही समाधान होगा।

+0

मैंने इसे कुछ महीने पहले OmniFaces के लिए देखा है। यह दुर्भाग्य से सस्ते/तुच्छ नहीं है। एक ही सादा जीईटी अनुरोध द्वारा पोस्टबैक द्वारा किए गए सभी AJAX परिवर्तनों सहित सभी वांछित जेएसएफ दृश्य स्थिति को वापस करने में सक्षम होना चाहिए। एप्लिकेशन-व्यापी (सत्र-स्वतंत्र) तरीके से इसे प्राप्त करने के लिए सभी आवश्यक जानकारी GET URL को बहुत लंबा बनाती है। यूआरएल को छोटा करने के तरीके हैं, लेकिन फिर भी ... और फिर मैं अभी तक घटक पुस्तकालय विनिर्देश नहीं ले रहा हूं। – BalusC

+0

प्रतिक्रिया के लिए धन्यवाद। हालांकि, मैं इसे पूरी तरह से समझ नहीं पा रहा हूं। मुझे लगता है कि यह एक यूआरएल सेट करने के लिए डेवलपर की ज़िम्मेदारी होनी चाहिए जो रीफ्रेश होने पर बिल्कुल वही पेज वापस दे - विचारों को अनुरोध विशेषताओं को संभालना चाहिए। असल में मैंने पहले ही ऐसा कर लिया है, क्योंकि 'गैर-AJAX GET लिंक उत्पन्न करता है - मैं चाहता हूं कि इसके बजाय एक AJAX अनुरोध भेजना है और पहले यूआरएल को '' द्वारा जेनरेट किया गया है। यह ' 'या कुछ और भी हो सकता है, बिंदु यह है कि इसे इस तरह काम करना चाहिए। – apcuk

+0

यदि उद्देश्य शुद्ध पृष्ठ-से-पृष्ठ नेविगेशन है, तो यह वास्तव में लागू करने के लिए आसान होगा। लेकिन '' आमतौर पर नेविगेशन की तुलना में कई अन्य उपयोगी चीजों के लिए उपयोग किया जाता है। * वह * हिस्सा तब तुच्छ नहीं है। – BalusC

उत्तर

-1

<f:ajax> विशेषता वनेंट है। इसमें javascript फ़ंक्शन का नाम होता है जिसे ajax request सफलतापूर्वक समाप्त होने के बाद बुलाया जाएगा। इसलिए जेएस फ़ंक्शन जोड़ना संभव है जो AJAX कॉल समाप्त होने के बाद आवश्यक यूआरएल पर नेविगेट करेगा। कुछ ऐसा:

 <h:commandLink id="testButton" 
         value="Test"> 
      <f:ajax event="action" 
        execute="@form" 
        render="@none" 
        listener="#{myBean.testButtonClickedHandler}" 
        onevent="navigate"/> 
     </h:commandLink> 

<script type="text/javascript"> 
    function navigate() { 
     window.location.href = "required url"; 
    } 
</script>