2011-08-23 14 views
7

मैं एक जेएसएफ वेब एप्लिकेशन पर काम कर रहा हूं। हर बार जब मैं सीएसएस फाइलों को बदलता हूं और प्रोग्राम को पहली बार तैनात करता हूं, तो सीएसएस फाइलों में बदलाव प्रतिबिंबित नहीं होते हैं। मैंने इसे विभिन्न स्थितियों पर परीक्षण किया। यह कैसे होता है और मैं इसे कैसे हल कर सकता हूं?सीएसएस फ़ाइलों में परिवर्तन तैनाती के बाद प्रतिबिंबित नहीं होते

+2

एक बाहर करने के लिए और अन्य, वे लोड जब आप ब्राउज़र में Ctrl + F5 दबाएँ:

यहाँ लिंक है? – BalusC

+0

हाँ जब मैं Ctrl + F5 दबाता हूं तो यह – qazal

+0

लोड होता है हाँ जब मैं Ctrl + F5 दबाता हूं तो यह लोड होता है। इस अर्थ में, अंतिम सीएसएस ब्राउज़र नकदी में रहता है। मैं नकदी के साथ इस समस्या को कैसे हल कर सकता हूं? – qazal

उत्तर

12

हाँ जब मैं Ctrl + F5 दबाएँ यह

भरी हुई है तो यह सिर्फ ब्राउज़र कैश से कार्य किया गया था। यह बिल्कुल ठीक है। यह वास्तविक उत्पादन वातावरण में नेटवर्क बैंडविड्थ बचाता है। लेकिन मैं कल्पना कर सकता हूं कि यह विकास के दौरान परेशान है या जब भी आप उत्पादन में अपडेट लाते हैं। विकास के दौरान मैं बस Ctrl + F5 कुंजी पर उपयोग करना सीखूंगा। लेकिन उत्पादन के लिए आप वास्तव में इसे हल करना चाहते हैं क्योंकि एंडुसर को "चाल" के बारे में पता नहीं हो सकता है।

एक आम तरीका सीएसएस संसाधन में अनुरोध पैरामीटर के रूप में संस्करण संख्या को जोड़ना है।

<link rel="stylesheet" href="style.css?v=1.0" /> 

हर जब तुम बड़े बदलाव सीएसएस बनाने के लिए, तो आप उत्पादन में अद्यतन लाने से पहले संस्करण को अपडेट करना चाहते हैं।

<link rel="stylesheet" href="style.css?v=1.1" /> 

यह ब्राउज़र को स्टाइलशीट को फिर से लोड करने के लिए मजबूर करेगा।

एक और तरीका सर्वर के स्टार्टअप समय का उपयोग करना है। चूंकि आप जेएसएफ का उपयोग कर रहे हैं, यह आसानी से java.util.Date के साथ faces-config.xml में एक अनुप्रयोग स्कॉप्ड प्रबंधित बीन के रूप में घोषित किया जा सकता है।

<managed-bean> 
    <description>Startup date</description> 
    <managed-bean-name>startup</managed-bean-name> 
    <managed-bean-class>java.util.Date</managed-bean-class> 
    <managed-bean-scope>application</managed-bean-scope> 
</managed-bean> 

तो फिर तुम Date#getTime() उपयोग कर सकते हैं टाइमस्टैम्प प्राप्त करने के लिए:

<link rel="stylesheet" href="style.css?#{startup.time}" /> 

इस तरह HTML में उत्पन्न हो जाएगा:

<link rel="stylesheet" href="style.css?1314105929937" /> 

यह हर बदल देंगे आप सर्वर को पुनरारंभ करें या वेबपैप को फिर से तैनात करें, इसलिए ब्राउज़र को संसाधन को फिर से लोड करने के लिए मजबूर किया जाएगा (यहां तक ​​कि जब इसे वास्तव में बदला नहीं गया है! तो इसे ध्यान में रखें यदि कैशिंग और बैंडविड्थ उपयोग एक कंसर है एन)। जावा तकनीक और छवियों जैसे अन्य स्थिर संसाधनों पर एक ही तकनीक लागू होती है।

जब आप पहले से ही JSF 2.x पर हैं, तो आप इसके लिए अंतर्निहित "संसाधन लाइब्रेरी संस्करण" सुविधा का उपयोग कर सकते हैं। यह भी देखें What is the JSF resource library for and how should it be used?

+0

आपके समाधान – qazal

+0

+1 के लिए बहुत उपयोगी धन्यवाद, धन्यवाद बलससी। हो सकता है कि आपको अपने उत्तरों को किसी पुस्तक में संकलित करना चाहिए (यदि आपके पास कुछ खाली समय होना चाहिए)। मैं इसे खरीदूंगा :) – kostja

+0

अच्छा विचार है, लेकिन क्या इसे सीएसएस फाइलों सहित जेएसएफ तरीके से गठबंधन करने का कोई मौका है, यानी ' '? –

0

सीएसएस फ़ाइलों को बदलने के दौरान मुझे वही समस्याएं थीं और साइट को रीफ्रेश करने के लिए आवश्यक थी, बहुत ही कष्टप्रद और बहुत ही असभ्य था।

आखिरकार मैं इस अच्छे छोटे "टूल", एक जावास्क्रिप्ट फ़ाइल में आया, जिसे आपको अपनी परियोजना में लागू करने की आवश्यकता है। बाद में आपको साइट को रीफ्रेश करने की आवश्यकता नहीं है, आपको बस अपनी सीएसएस फ़ाइल को सहेजने की आवश्यकता है, और बदलाव 2,3 सेकंड के बाद स्वचालित रूप से अपनाए जाएंगे। हमेशा की तरह, http://cssrefresh.frebsite.nl/

रास्ता BalusC से, बहुत ही उपयोगी चाल तक;)

+0

मैंने आपके द्वारा उपयोग किए जाने वाले तरीके का उपयोग करने की कोशिश की लेकिन मेरे लिए काम नहीं कर रहा है। मैंने जेएस फ़ाइल डाउनलोड की और इसे मेरे प्रोजेक्ट में रखा लेकिन इसका कोई प्रभाव नहीं पड़ा :( – Aditzu

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