दिलचस्प पोस्ट
रेल में कई डेटाबेस <String> और <string.h> के बीच का अंतर? कठिन समय समझने के लिए git-fetch वर्डप्रेस यूआरएल से श्रेणी और टैग आधार हटाएं – बिना किसी प्लगइन के एंड्रॉइड कई डेटाबेस खुला उपकरण के कमांड लाइन उदाहरणों (XCode) से प्रमाणीकरण प्रॉम्प्ट को निकालने का कोई तरीका है? ऑपरेटरों और ऑपरेटरों के क्रमांतर के लिए एल्गोरिथ्म पायथन – ई-मेल हैडर डीकोडिंग यूटीएफ -8 Android में ग्रेस्केल को एक बिटमैप कन्वर्ट करें लंबे डिवा को तोड़ने से कैसे लंबे शब्दों को रोकने के लिए? संपादक में एक मुख्य प्रकार शामिल नहीं है कोणीय 2 ड्रॉपडाउन विकल्प डिफ़ॉल्ट मूल्य मूल्य या संदर्भ से पारित पीएचपी चर रहे हैं? कन्स्ट्रक्टर में या घोषणा पर वर्ग के क्षेत्रों को प्रारंभ करें? Internet Explorer और jQuery के साथ "अनुमति अस्वीकृत"

JSF संसाधन लाइब्रेरी क्या है और इसका उपयोग कैसे किया जाना चाहिए?

जेएसएफ <h:outputStylesheet> <h:outputScript> <h:outputStylesheet> , <h:outputScript> और <h:graphicImage> घटक में एक library विशेषता होती है। यह क्या है और यह कैसे इस्तेमाल किया जाना चाहिए? वेब पर बहुत सारे उदाहरण हैं जो इसे इस्तेमाल करते हुए टैग पर निर्भर करते हुए सामान्य सामग्री / फ़ाइल प्रकार css , js और img (या image ) के साथ पुस्तकालय नाम के अनुसार निम्न प्रकार का प्रयोग करते हैं:

 <h:outputStylesheet library="css" name="style.css" /> <h:outputScript library="js" name="script.js" /> <h:graphicImage library="img" name="logo.png" /> 

यह कैसे उपयोगी है? उन उदाहरणों में library मान को सिर्फ दोहराते हुए लगता है कि पहले से ही टैग नाम के द्वारा प्रतिनिधित्व किया गया है। एक <h:outputStylesheet> यह टैग नाम पर पहले से ही स्पष्ट है कि यह एक "सीएसएस पुस्तकालय" का प्रतिनिधित्व करता है। निम्नलिखित के साथ क्या अंतर है जो भी उसी तरीके से काम करता है?

 <h:outputStylesheet name="css/style.css" /> <h:outputScript name="js/script.js" /> <h:graphicImage name="img/logo.png" /> 

साथ ही, उत्पन्न HTML आउटपुट थोड़ा अलग है *.xhtml FacesServlet यूआरएल पैटर्न पर /contextname और FacesServlet मैपिंग के संदर्भ पथ को देखते हुए, पूर्व में निम्नलिखित पैरामीटर के रूप में लाइब्रेरी नाम के साथ HTML उत्पन्न करता है:

 <link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/style.css.xhtml?ln=css" /> <script type="text/javascript" src="/contextname/javax.faces.resource/script.js.xhtml?ln=js"></script> <img src="/contextname/javax.faces.resource/logo.png.xhtml?ln=img" alt="" /> 

जबकि उत्तरार्द्ध निम्नलिखित HTML को यूआरआई के पथ में लाइब्रेरी नाम के साथ उत्पन्न करता है:

 <link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml" /> <script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml"></script> <img src="/contextname/javax.faces.resource/img/logo.png.xhtml" alt="" /> 

बाद के दृष्टिकोण, पूर्व दृष्टिकोण से भी अधिक समझ में आता है। library विशेषता वास्तव में कितनी उपयोगी है?

Solutions Collecting From Web of "JSF संसाधन लाइब्रेरी क्या है और इसका उपयोग कैसे किया जाना चाहिए?"

वास्तव में, वेब पर उन सभी उदाहरणों में जहां सामान्य सामग्री / फ़ाइल प्रकार जैसे "जेएस", "सीएसएस", "आईएमजी" आदि का उपयोग लाइब्रेरी नाम के रूप में किया गया है, भ्रामक हैं

असली दुनिया उदाहरण

शुरू करने के लिए, आइए देखें कि मौजूदा जेएसएफ लागूकरण जैसे मूजररा और माइफ़्स और जेएसएफ के घटक पुस्तकालयों जैसे प्राइमफैसेस और ओमनीएफ़सस इसका प्रयोग करते हैं। उनमें से कोई भी इस तरह संसाधन पुस्तकालयों का उपयोग नहीं करता है। वे इसका उपयोग (कवर के अंतर्गत, @ResourceDependency या UIViewRoot#addComponentResource() ) द्वारा निम्न तरीके से करते हैं:

 <h:outputScript library="javax.faces" name="jsf.js" /> <h:outputScript library="primefaces" name="jquery/jquery.js" /> <h:outputScript library="omnifaces" name="omnifaces.js" /> <h:outputScript library="omnifaces" name="fixviewstate.js" /> <h:outputScript library="omnifaces.combined" name="[dynamicname].js" /> <h:outputStylesheet library="primefaces" name="primefaces.css" /> <h:outputStylesheet library="primefaces-aristo" name="theme.css" /> <h:outputStylesheet library="primefaces-vader" name="theme.css" /> 

यह स्पष्ट हो जाना चाहिए कि यह मूल रूप से सामान्य लाइब्रेरी / मॉड्यूल / थीम नाम का प्रतिनिधित्व करता है जहां उन सभी संसाधनों का आमतौर पर संबंध है।

आसान पहचान

इस तरह से यह निर्दिष्ट करना और अंतर करना इतना आसान है कि उन संसाधनों से संबंधित और / या से आ रहे हैं। कल्पना कीजिए कि आपके पास अपने स्वयं के primefaces.css में primefaces.css संसाधन है, जिसमें आप प्राइमफॉसेस के कुछ डीफॉल्ट सीएसएस ओवरराइड / फाइन करने जा रहे हैं; अगर प्राइमफ़ेस ने अपने primefaces.css लिए लाइब्रेरी नाम का उपयोग नहीं किया है, तो प्राइमफैसेस के मालिकों का कोई भी लोड नहीं होता है, बल्कि इसके बजाय वेबएप-आपूर्ति की जाती है, जो कि 'एन'फेल को तोड़ देगा

इसके अलावा, जब आप एक कस्टम ResourceHandler हैंडलर का उपयोग कर रहे हैं, तो आप library के सही तरीके से उपयोग किए जाने वाले किसी विशिष्ट पुस्तकालय से आने वाले संसाधनों पर अधिक बेहतर दानेदार नियंत्रण भी लागू कर सकते हैं। यदि सभी घटक पुस्तकालयों ने अपने सभी जेएस फाइलों के लिए "जेएस" का उपयोग किया होता, तो रिसोर्सहैंडलर कभी एक अलग घटक लाइब्रेरी से आ रहा है या नहीं, यह कैसे अलग होगा? उदाहरण हैं OmniFaces CombinedResourceHandler और ग्राफ़िक रिसोर्सहैंडलर; श्रृंखला में अगले संसाधन हैंडलर को नियुक्त करने से पहले लाइब्रेरी की जांच की गई है, जिसमें createResource() विधि की जांच करें इस तरह से वे जानते हैं कि उद्देश्य के लिए GraphicResource या GraphicResource कब बनाना है।

उल्लेखनीय होना चाहिए कि रिचफेस ने इसे गलत किया था यह किसी भी library उपयोग बिल्कुल भी नहीं किया और इसके ऊपर एक और संसाधन हैंडलिंग परत पर होमब्रेड किया था और इसलिए रिचफेसेस संसाधनों की पहचान करने के लिए प्रोग्रामिंग के लिए असंभव है। वास्तव में यही कारण है कि ओमनीएफेस CombinedResourceHander रिसोर्सहांडर को रिचफेस संसाधनों के साथ वैसे भी काम करने के लिए प्रतिबिंब-आधारित हैक पेश करना पड़ा।

अपने खुद के वेबपेज

अपने स्वयं के वेबपोट को एक संसाधन पुस्तकालय की आवश्यकता नहीं है। आप सबसे अच्छे तरीके से इसे छोड़ देंगे।

 <h:outputStylesheet name="css/style.css" /> <h:outputScript name="js/script.js" /> <h:graphicImage name="img/logo.png" /> 

या, यदि आपके पास वास्तव में एक की आवश्यकता है, तो आप इसे "डिफ़ॉल्ट" या कुछ कम्पनी का नाम जैसे एक अधिक समझदार सामान्य नाम दे सकते हैं।

 <h:outputStylesheet library="default" name="css/style.css" /> <h:outputScript library="default" name="js/script.js" /> <h:graphicImage library="default" name="img/logo.png" /> 

या, जब कुछ मास्टर फेसलेट टेम्पलेट्स के लिए संसाधन विशिष्ट होते हैं, तो आप इसे टेम्पलेट का नाम भी दे सकते हैं, जिससे कि एक-दूसरे को संबोधित करना आसान हो। दूसरे शब्दों में, स्वयं-दस्तावेजी प्रयोजनों के लिए यह अधिक है उदा / / /WEB-INF/templates/layout.xhtml templates/ /WEB-INF/templates/layout.xhtml टेम्पलेट फ़ाइल में उदाहरण:

 <h:outputStylesheet library="layout" name="css/style.css" /> <h:outputScript library="layout" name="js/script.js" /> 

और / /WEB-INF/templates/admin.xhtml templates/ /WEB-INF/templates/admin.xhtml टेम्पलेट फ़ाइल:

 <h:outputStylesheet library="admin" name="css/style.css" /> <h:outputScript library="admin" name="js/script.js" /> 

वास्तविक दुनिया उदाहरण के लिए, OmniFaces शोकेस स्रोत कोड देखें ।

या, जब आप एक से अधिक वेबएप पर समान संसाधनों को साझा करना चाहते हैं और उसी उत्तर के समान उदाहरण के आधार पर "आम" प्रोजेक्ट बनाया है जो बदले में Webapp /WEB-INF/lib में JAR के रूप में एम्बेडेड है, तब भी इसे लाइब्रेरी के रूप में संदर्भित करें (नाम आपकी पसंद के लिए निशुल्क है; ओमनीफेस और प्राइमफेस जैसी घटक लाइब्रेरी भी इस तरह काम करते हैं):

 <h:outputStylesheet library="common" name="css/style.css" /> <h:outputScript library="common" name="js/script.js" /> <h:graphicImage library="common" name="img/logo.png" /> 

पुस्तकालय संस्करण

एक अन्य मुख्य लाभ यह है कि आप अपने स्वयं के वेबपेज द्वारा प्रदान किए गए संसाधनों पर संसाधन पुस्तकालय संस्करण को सही तरीके से लागू कर सकते हैं (यह जार में एम्बेडेड संसाधनों के लिए काम नहीं करता है)। आप संसाधन पुस्तकालय संस्करण को दर्शाने के लिए \d+(_\d+)* पैटर्न में एक नाम के साथ पुस्तकालय फ़ोल्डर में एक प्रत्यक्ष बाल सबफ़ोल्डर बना सकते हैं।

 WebContent |-- resources | `-- default | `-- 1_0 | |-- css | | `-- style.css | |-- img | | `-- logo.png | `-- js | `-- script.js : 

इस मार्कअप का उपयोग करते समय:

 <h:outputStylesheet library="default" name="css/style.css" /> <h:outputScript library="default" name="js/script.js" /> <h:graphicImage library="default" name="img/logo.png" /> 

यह निम्न HTML को लाइब्रेरी संस्करण के साथ v पैरामीटर के रूप में उत्पन्न करेगा:

 <link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml?ln=default&amp;v=1_0" /> <script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml?ln=default&amp;v=1_0"></script> <img src="/contextname/javax.faces.resource/img/logo.png.xhtml?ln=default&amp;v=1_0" alt="" /> 

इसलिए, अगर आपने कुछ संसाधनों को संपादित और अद्यतन किया है, तो आपको केवल एक नया मान कॉपी या नामकरण के लिए फाइल करने की आवश्यकता है। यदि आपके पास एकाधिक संस्करण फ़ोल्डर हैं, तो JSF ResourceHandler स्वचालित रूप से उच्चतम संस्करण संख्या से संसाधन की सेवा करेगा, संख्यात्मक आदेश नियमों के अनुसार।

इसलिए, जब resources/default/1_1/* में प्रतिलिपि / resources/default/1_0/* फ़ोल्डर की नकल / पुन: नामकरण किया जाता है:

 WebContent |-- resources | `-- default | |-- 1_0 | | : | | | `-- 1_1 | |-- css | | `-- style.css | |-- img | | `-- logo.png | `-- js | `-- script.js : 

फिर अंतिम मार्कअप का उदाहरण निम्न HTML उत्पन्न करेगा:

 <link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml?ln=default&amp;v=1_1" /> <script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml?ln=default&amp;v=1_1"></script> <img src="/contextname/javax.faces.resource/img/logo.png.xhtml?ln=default&amp;v=1_1" alt="" /> 

यह वेबब्रोवर को संसाधन से सीधे सर्वर से अनुरोध करने के लिए मजबूर करेगा क्योंकि कैश से एक ही नाम के साथ एक को दिखाने के बजाय, जब बदलते पैरामीटर वाले यूआरएल को पहली बार अनुरोध किया जाता है। इस तरह से अंत उपयोगकर्ताओं को एक कठिन ताज़ा (Ctrl + F5 और इतने पर) करने की आवश्यकता नहीं है जब उन्हें अद्यतन CSS / JS संसाधन पुनः प्राप्त करने की आवश्यकता होती है।

कृपया ध्यान दें कि लाइब्रेरी संस्करण JAR फ़ाइल में संलग्न संसाधनों के लिए संभव नहीं है। आपको एक कस्टम ResourceHandler आवश्यकता होगी जार में संसाधनों के लिए JSF संस्करण का उपयोग कैसे करें ।

यह भी देखें:

  • JSF संसाधन वर्जनिंग
  • JSF2 स्टेटिक संसाधन कैशिंग
  • एकाधिक जेएसएफ परियोजनाओं के लिए साझा कोड के साथ संरचना
  • JSF 2.0 विनिर्देश – अध्याय 2.6 संसाधन हैंडलिंग