दरअसल, वेब पर उन सभी उदाहरणों में जिसमें सामान्य सामग्री / फ़ाइल प्रकार जैसे "js", "css", "img", इत्यादि का उपयोग किया गया है क्योंकि पुस्तकालय का नाम भ्रामक है ।
वास्तविक दुनिया के उदाहरण
प्रारंभ करने के लिए की तरह कैसे मौजूदा JSF कार्यान्वयन पर आइए नज़र Mojarra और MyFaces और तरह JSF घटक पुस्तकालयों PrimeFaces और OmniFaces में उपयोग करें। उनमें से कोई भी इस तरह से संसाधन पुस्तकालयों का उपयोग नहीं करता है। वे इसे का उपयोग करें (कवर के तहत, द्वारा @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 ने अपने लिए लाइब्रेरी नाम का उपयोग नहीं किया हैprimefaces.css
, तो PrimeFaces स्वयं लोड नहीं होंगे, बल्कि इसके बजाय वेब-आपूर्ति की गई, जो कि लुक को तोड़ देगी।
इसके अलावा, जब आप एक कस्टम का उपयोग कर रहे हैं, तो आप ResourceHandler
एक विशिष्ट पुस्तकालय से आने वाले संसाधनों पर अधिक महीन दानेदार नियंत्रण भी लागू कर सकते हैं जब library
सही तरीके से उपयोग किया जाता है। यदि सभी घटक पुस्तकालयों ने अपनी सभी जेएस फाइलों के लिए "जेएस" का उपयोग किया होगा, ResourceHandler
तो यह विशिष्ट घटक पुस्तकालय से आने पर कैसे अलग होगा ? उदाहरण ओमनीफेस CombinedResourceHandler
और हैं GraphicResourceHandler
; createResource()
श्रृंखला में अगले संसाधन हैंडलर को सौंपने से पहले पुस्तकालय की जाँच की जाने वाली विधि की जाँच करें । इस तरह वे जानते हैं कि कब CombinedResource
या 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
टेम्प्लेट फ़ाइल में उदा :
<h:outputStylesheet library="layout" name="css/style.css" />
<h:outputScript library="layout" name="js/script.js" />
और एक /WEB-INF/templates/admin.xhtml
टेम्पलेट फ़ाइल:
<h:outputStylesheet library="admin" name="css/style.css" />
<h:outputScript library="admin" name="js/script.js" />
एक वास्तविक दुनिया उदाहरण के लिए, ओमनीफेस शोकेस स्रोत कोड की जांच करें ।
या, जब आप एक से अधिक वेबपृष्ठों पर समान संसाधन साझा करना चाहते हैं और उसी के लिए एक "सामान्य" प्रोजेक्ट बनाया है, जो इस उत्तर में उदाहरण के रूप में है, जो बदले में वेब के JAR के रूप में एम्बेडेड है /WEB-INF/lib
, तो इसे लाइब्रेरी के रूप में भी देखें (नाम आपकी पसंद के लिए स्वतंत्र है; ओमनीफेस और प्राइमफेस जैसे घटक पुस्तकालय भी उस तरह से काम करते हैं)
<h:outputStylesheet library="common" name="css/style.css" />
<h:outputScript library="common" name="js/script.js" />
<h:graphicImage library="common" name="img/logo.png" />
लाइब्रेरी संस्करण
एक और मुख्य लाभ यह है कि आप अपने स्वयं के वेबप द्वारा प्रदान संसाधनों पर सही तरीके से संसाधन लाइब्रेरी को लागू कर सकते हैं (यह एक JAR में एम्बेडेड संसाधनों के लिए काम नहीं करता है)। आप \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" />
यह v
पैरामीटर के रूप में लाइब्रेरी संस्करण के साथ निम्न HTML उत्पन्न करेगा :
<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml?ln=default&v=1_0" />
<script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml?ln=default&v=1_0"></script>
<img src="/contextname/javax.faces.resource/img/logo.png.xhtml?ln=default&v=1_0" alt="" />
इसलिए, यदि आपने कुछ संसाधन संपादित / अपडेट किए हैं, तो आपको बस इतना करना होगा कि संस्करण फ़ोल्डर को एक नए मान में कॉपी या नाम बदल दिया जाए। यदि आपके पास कई संस्करण फ़ोल्डर हैं, तो ResourceHandler
संख्यात्मक क्रम नियमों के अनुसार, JSF स्वचालित रूप से उच्चतम संस्करण संख्या से संसाधन की सेवा करेगा।
इसलिए, जब resources/default/1_0/*
फ़ोल्डर की नकल / नाम बदलना resources/default/1_1/*
इस प्रकार है:
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&v=1_1" />
<script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml?ln=default&v=1_1"></script>
<img src="/contextname/javax.faces.resource/img/logo.png.xhtml?ln=default&v=1_1" alt="" />
यह वेबब्रोसर को कैश से एक ही नाम के साथ एक को दिखाने के बजाय सर्वर से संसाधन का अनुरोध करने के लिए मजबूर करेगा, जब पहली बार बदले गए पैरामीटर के साथ URL का अनुरोध किया गया है। इस तरह से एंड्यूजर्स को हार्ड रिफ्रेश (Ctrl + F5 वगैरह) करने की आवश्यकता नहीं होती है, जब उन्हें अपडेटेड CSS / JS रिसोर्स को पुनः प्राप्त करने की आवश्यकता होती है।
कृपया ध्यान दें कि JAR फ़ाइल में संलग्न संसाधनों के लिए लाइब्रेरी संस्करण संभव नहीं है। आपको एक कस्टम की आवश्यकता होगी ResourceHandler
। जार में संसाधनों के लिए JSF संस्करण का उपयोग कैसे करें यह भी देखें ।
यह सभी देखें: