2011-03-28 12 views
33

मैंने जेएसएफ पृष्ठ के शीर्षलेख में JQuery1.5 शामिल किया है। उस पृष्ठ में पहले से ही कोड किए गए प्राइमफेस घटकों का एक गुच्छा है। पृष्ठ के शीर्षलेख में Jquery.js को शामिल करने के बाद, <p:commandButton> जैसे कुछ प्राइमफ़ेस घटक अपनी त्वचा खो देते हैं और <p:fileUpload> सामान्य जेएसपी <input type="file"> की तरह दिखता है और इसकी AJAX क्षमता पूरी तरह से खो देता है।JQuery संघर्ष?

क्या प्राइमफेस (बिना संघर्ष के) सुरक्षित रूप से JQuery का उपयोग करने का कोई तरीका है?

+0

मुझे नहीं पता कि यह प्रश्न _This प्रश्न के साथ क्यों चिह्नित है, पहले से पूछा गया है। इस प्रश्न के 2 साल बाद जुड़े प्रश्न पूछा गया था। –

उत्तर

49

मुझे प्रश्न में वर्णित वही समस्या थी।

निर्मित primefaces jQuery पुस्तकालय (वर्तमान में 1.4.1) सहित एक खुद jQuery पुस्तकालय सीएसएस स्वरूपण समस्याओं को जन्म देता के रूप में शामिल हैं: यही कारण है कि मैं निम्नलिखित समाधान के साथ आया है। target="head" विशेषता जोड़ने से हर जगह टैग निर्दिष्ट करने की अनुमति मिलती है - उदा।

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> 

primefaces jQuery पुस्तकालय संघर्ष मोड में डिफ़ॉल्ट रूप से शामिल किया गया है: जब आप templating का उपयोग कर हमेशा <head> टैग के लिए पहुँच नहीं। इसका मतलब है कि $() शॉर्टकट उपयोग नहीं कर सकता है। दूर करने के लिए इस मुद्दे को एक <script> या <h:outputScript> टैग में निम्न पंक्ति में शामिल हैं:

<h:outputScript target="head"> 
    // Add the $() function 
    $ = jQuery; 
    // Now you can use it 
    $(document).ready(function() { 
     ... 
    }); 
</h:outputScript> 

सबसे अच्छा समाधान मैं अब तक की खुदाई कर सकता है, primefaces 2.2.1 का उपयोग कर रहा है यही कारण है कि।

+0

बहुत बहुत धन्यवाद :) – Selvin

+3

ऊपर लार्स स्पष्टीकरण के अलावा, प्राइमफ़ेस स्वचालित रूप से उन पृष्ठों पर jQuery शामिल नहीं करते हैं जो प्राइमफ़ेस घटकों का उपयोग नहीं करते हैं, भले ही प्राइमफ़ेस नेमस्पेस को टैग में परिभाषित किया गया हो, ताकि आप या तो लार्स द्वारा समझाया गया विधि या प्राइमफ़ेस घटक कार्यान्वयन का उपयोग करने के लिए अपने घटकों में से एक को बदलें, परिवर्तन में बदलें। –

3

jQuery में 'noConflict' मोड है जो इसे अन्य पुस्तकालयों के साथ-साथ अच्छी तरह से खेलने की अनुमति देता है। मैंने प्राइमफ़ेस घटकों का उपयोग नहीं किया है, इसलिए मुझे निश्चित रूप से पता नहीं है, लेकिन यदि आप jQuery में नॉनफ्लफ्लिक्ट मोड में शामिल हैं, तो आपकी समस्याएं दूर हो जाएंगी।

6

कई जावास्क्रिप्ट पुस्तकालय $ फ़ंक्शन या चर नाम के रूप में उपयोग करते हैं, जैसे कि jQuery करता है। JQuery के मामले में, $jQuery के लिए सिर्फ एक उपनाम है, इसलिए सभी कार्यक्षमता $ का उपयोग किए बिना उपलब्ध है। निम्नलिखित कुछ तरीके हैं: jQuery के प्रारंभ से पहले

  • लिखें jQuery.noConflict();, नीचे देखें

    jQuery.noConflict(); 
    $(document).ready(function(){ 
        // your jQuery code 
    }); 
    
  • स्क्रिप्ट के बाकी हिस्सों में उपयोग करने के लिए jQuery के बजाय एक अलग उर्फ ​​बनाएँ।

    var j = jQuery.noConflict(); 
    // Do something with jQuery 
    j("div p").hide(); 
    
  • बदलें $ के सभी उदाहरण: jQuery कोड ब्लॉक में jQuery के साथ बदलें $

    jQuery(document).ready(function){ 
         jQuery("div p").hide(); 
    }) 
    
  • पूरी तरह से किसी अन्य वस्तु में एक नया नाम स्थान के लिए jQuery चलते हैं। $ स्थानीय के

    var dom = {}; 
    dom.query = jQuery.noConflict(true); 
    // Do something with the new jQuery 
    dom.query("div p").hide(); 
    
  • सेट दायरे से वैश्विक

    // Method 1 
        jQuery(document).ready(function($){ 
         $("div").hide(); 
        }); 
    
    
        // Method 2 
        (function($) { 
         /* some code that uses $ */ 
        })(jQuery); 
    

    नोट के बजाय: इस बिंदु एक दोष के साथ आता है, तो आप अपने अन्य लाइब्रेरी की $ के लिए पहुँच नहीं होगा() विधि।

Original Reference

43

क्यों PrimeFaces साथ jQuery बंडलों का उपयोग नहीं?

<h:outputScript library="primefaces" name="jquery/jquery.js" /> 

प्राइमफेस 2.2.1 में jQuery 1.4.4 और 3.0 (विकास में) 1.5.1 है।

+4

एक साइड नोट के रूप में, 2.2.1 की jquery में डिफ़ॉल्ट रूप से noconflict सक्षम है और 3.0 के पास noconflict नहीं है। –

3

मेरा अनुभव:

मैं एक ही समस्या थी और कभी दोनों jQuery libs के साथ काम मिल गया। (मैं $ के बजाय jQuery का उपयोग करता हूं लेकिन jQuery.noConflict() कभी कोशिश नहीं की)।

मेरे समाधान केवल lib Cagatays जवाब में वर्णित के रूप primefaces के साथ बंडल इस्तेमाल किया गया।

+0

वही मेरे लिए है। मैं केवल jQuery में निर्मित प्राइमफेस का उपयोग कर सकता हूं; जब मैं अपने स्वयं के jQuery lib का उपयोग कर सीएसएस शैलियों दूषित हो जाएगा। इसका मतलब है कि मैं $() के बजाय केवल jQuery() फ़ंक्शन का उपयोग कर सकता हूं। –

6

मेरे समाधान डिफ़ॉल्ट पृष्ठ में इस कोड को जोड़ना है: उसके बाद

<script type="text/javascript">var $j = jQuery.noConflict(true);</script> 

मैं के साथ jQuery का उपयोग करें:

$j 

धन्यवाद,

1

Primefaces और jQuery से बचने के बीच संघर्ष को हल करने के किसी भी बाहरी jQuery फ़ाइल को आयात करने के लिए, समस्या को हल करने के लिए प्राइमफ़ेस में स्थित jQuery फ़ाइलों को आयात करें jar

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> 
     <h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" /> 

और अपने jQuery कोड में jQuery के साथ $ बदलें।

+0

लगभग समान बनाने के बजाय 39 अपवित्र उत्तर में सुधार क्यों नहीं करें? – Kukeltje

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