2011-09-22 16 views
19

मुझे जेआरबेल, स्प्रिंग, जेएसएफ मोज़रा 2.0.3 और वेबलोगिक 10.3 का उपयोग करके हॉट-रीलोडिंग एक्सएचटीएमएल फाइलों में कुछ समस्याएं थीं।जेएसएफ और एक्सएचटीएमएल फाइलों का स्वत: पुनः लोड

जेआरबेल नियमित जावा कक्षाओं और जेएस/सीएसएस फ़ाइलों को/WebContent के तहत सफलतापूर्वक पुनः लोड करता है, लेकिन जेएसएफ की .xhtml फ़ाइलों नहीं। सर्वर पर अद्यतन xhtml फ़ाइलों को प्राप्त करने के लिए एक पूर्ण पुन: प्रकाशित करना आवश्यक था।

परीक्षण और त्रुटि से मैं अंततः इसे वेब.एक्सएमएल में कुछ फेसलेट पैरामीटर जोड़कर और कस्टम संसाधन रिसोल्वर बनाने के द्वारा in this blog post वर्णित करके काम करने के लिए मिला।

हालांकि, मुझे आश्चर्य है कि क्यों यह काम करता है, और अधिक विशेष रूप:

  • क्यों एक कस्टम ResourceResolver की आवश्यकता है?
  • क्या जेआरबेल को निगरानी/वेबकंटेंट द्वारा इसे संभालना नहीं है जहां xhtml फाइलें रहती हैं?
  • मुझे लगता है कि फेससेट्स/जेएसएफ के साथ xhtml को servlets (?) में FacesServlet के माध्यम से संकलित करने के लिए कुछ करना है जो जेरेबेल का पता लगाने में असमर्थ है?

उत्तर

37

जेआरबेल हैंडल/वेबकंटेंट फ़ोल्डर में परिवर्तन।

समस्या यह है कि फेसलेट कैशिंग करते हैं और बदली गई फ़ाइलों को दोबारा नहीं पढ़ते हैं। रीड को मजबूर करने के लिए web.xml में निम्न पैरामीटर निर्दिष्ट करें।

JSF 2 (Facelets 2.x):

<!-- Time in seconds that facelets should be checked for changes since last request. A value of -1 disables refresh checking. --> 
<context-param> 
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name> 
    <param-value>0</param-value> 
</context-param> 

<!-- Set the project stage to "Development", "UnitTest", "SystemTest", or "Production". --> 
<!-- An optional parameter that makes troubleshooting errors much easier. --> 
<!-- You should remove this context parameter before deploying to production! --> 
<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 

लिए JSF 1.2 (Facelets 1.x) मानकों हैं:

<context-param> 
    <param-name>facelets.REFRESH_PERIOD</param-name> 
    <param-value>0</param-value> 
</context-param> 
<context-param> 
    <param-name>facelets.DEVELOPMENT</param-name> 
    <param-value>true</param-value> 
</context-param> 

JSF संदर्भ के बारे में अधिक पैराम्स: http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

आपके मामले में उस कस्टम संसाधन समाधान की आवश्यकता नहीं है। वह संसाधन रिज़ॉल्वर कस्टम फ़ाइल सिस्टम फ़ोल्डर से xhtml फ़ाइलों को प्राप्त करने का एक मुश्किल तरीका है। आपके मामले में जेरेबेल ऐसा करता है (और इससे भी अधिक)।

+0

में Project StageDevelopment उपयोग कर रहे हैं मेरा मानना ​​है कि जेआरबेल पहले से ही ऐसा करता है। कम से कम, यह यहाँ करता है। ध्यान दें कि आपके संदर्भ पैराम फेसलेट 1.x विशिष्ट हैं और ओपी फेसलेट 2.x का उपयोग कर रहा है। – BalusC

+0

@ बाल्लूस्क उत्तर के लिए धन्यवाद, उत्तर Facelets 2.x विशिष्ट होने के लिए अद्यतन किया गया है। – Andrey

+0

'javax.faces.FACELETS_REFRESH_PERIOD' से '0' और' javax.faces.PROJECT_STAGE' को' विकास' 'पर सेट करना जेएसईबी 2.0.4 और वेबलॉगिक 10.3 पर जेआरबेल के साथ अद्यतन टेम्पलेट्स को ट्रिगर नहीं करता है। – uggedal

1

यहाँ मैं कैसे मेरे लिए यह तय हो गई है:

  1. सत्यापित करें कि facelets प्लगइन आपके JRebel सेटिंग्स &
  2. में सक्षम किया गया है सत्यापित करें कि आप अपने web.xml
संबंधित मुद्दे