2011-10-02 16 views
5

मैं एक उदाहरण का उपयोग करते हुए मेरे सवाल ilustrate देगा:कि UI का उपयोग शामिल किया गया था एक एक्सएचटीएमएल फ़ाइल में जे एस फ़ाइलें शामिल करें: शामिल

outerfile.xhtml:

<h:head> 
    <h:outputScript library="js" name="jquery-1.6.2.js" /> 
    <h:outputScript library="js" name="outer.js" /> 
</h:head> 

<h:body> 
    <h:panelGroup id="inner_panel"> 
     <ui:include src="innerfile.xhtml" /> 
    </h:panelGroup> 
</h:body> 

innerfile.xhtml:

<ui:composition ... > 
    <h:head> 
     <h:outputScript library="js" name="jquery-1.6.2.js" /> 
     <h:outputScript library="js" name="inner.js" /> 
    </h:head> 

    <h:body> 
     <h:panelGroup> 
      I Am Text in The Inner File! 
     </h:panelGroup> 
    </h:body> 
</ui:composition> 

मेरे प्रश्न:

  1. क्या यह तय करना ठीक है आंतरिक फ़ाइल में js फ़ाइलों को मैंने जिस तरह से किया है?
  2. मैं की जरूरत है (और मैं चाहिए) भीतरी फ़ाइल में आम (jquery-1.6.2.js) की घोषणा फिर से है?
  3. अगर मैं संयुक्त राष्ट्र-प्रदान और AJAX का उपयोग कर फिर से प्रस्तुत करना inner_panel क्या होता है? क्या आंतरिक-शामिल हेडर को पुनः लोड किया जाएगा?

उत्तर

12

यह भीतरी फ़ाइल में js फ़ाइलों रास्ता मैंने किया था की घोषणा करने के लिए ठीक है?

नहीं, आप में शामिल में <h:head> भी निर्दिष्ट न करना चाहिए। इसका परिणाम केवल अमान्य HTML होगा।

<html> 
    <head> 
    <script></script> 
    </head> 
    <body> 
    <head> 
     <script></script> 
    </head> 
    <body> 
    </body> 
    </body> 
</html> 

(rightclick पेज ब्राउज़र में और स्रोत देखें यह यदि आवश्यक हो तो अपने आप को देखने के लिए करते हैं, w3-validate) innerfile.xhtml में तदनुसार

इसे ठीक करें: आप के रूप में अभी का परिणाम देगा

<ui:composition ... > 
    <h:outputScript library="js" name="jquery-1.6.2.js" target="head" /> 
    <h:outputScript library="js" name="inner.js" target="head" /> 

    <h:panelGroup> 
     I Am Text in The Inner File! 
    </h:panelGroup> 
</ui:composition> 

यह मान्य HTML का परिणाम देगा। स्क्रिप्ट <h:outputScript target="head"> द्वारा घोषित सिर्फ स्वचालित रूप से <head> में खत्म हो जाएगा, अगर पहले से ही से पहले घोषित नहीं किया। असली HTML में के रूप में की तरह, वहाँ, केवल एक<h:head> और <h:body> पूरे दृश्य में होना किसी खाके सहित और फ़ाइलों को शामिल करना चाहिए।


मैं की जरूरत है (और मैं चाहिए) आम (jQuery-1.6.2.js) फिर से भीतरी फ़ाइल में घोषित है?

यदि माता-पिता फ़ाइल को पहले ही <h:outputScript> के रूप में घोषित नहीं किया गया है। लेकिन इसमें शामिल होने से इसे नुकसान नहीं पहुंचाता है। इसे पहले से घोषित नहीं किया जाएगा, अगर इसे पहले से घोषित किया गया है।


अगर मैं संयुक्त राष्ट्र-प्रदान और अजाक्स का उपयोग फिर से प्रस्तुत करना inner_panel क्या होता है? क्या आंतरिक-शामिल हेडर को पुनः लोड किया जाएगा?

यह केवल तभी काम करता है जब आप target="head" का उपयोग नहीं करते हैं।चाहे वे सर्वर से पुनः लोड हो जाएंगे, इस पर निर्भर करता है कि ब्राउज़र कैश में पहले से मौजूद है और पहले से मौजूद है और पहले ही ब्राउज़र द्वारा अनुरोध किया गया है या नहीं। लेकिन मूल रूप से, ब्राउजर को फिर से लोड करने के लिए कहा जाएगा, हां। फायरबग के साथ आप इसे आसानी से निर्धारित कर सकते हैं।

+0

टीएनएक्स। छोटे अनुवर्ती - आपके उत्तर के अनुसार, यदि मैं पृष्ठ को लोड करता हूं, जब ते आंतरिक पृष्ठ प्रस्तुत नहीं किया जाता है और फिर आंतरिक पृष्ठ प्रस्तुत करता है, तो आंतरिक जेएस फ़ाइलें गायब हो जाएंगी। सही? – Ben

+0

मैंने यह नहीं कहा था। उन्हें शामिल किया जाएगा। ब्राउजर उन्हें लोड करने के लिए कहा जाएगा। लेकिन क्या यह ब्राउज़र कैश से या सीधे सर्वर से प्राप्त किया गया है, जेएस प्रतिक्रिया पर शीर्षकों पर निर्भर करता है और यदि यह पहले से ही ब्राउज़र कैश में है या नहीं। यदि यह ब्राउज़र कैश में कैश करने योग्य और मौजूद है, तो इसे पुनः लोड नहीं किया जाएगा (क्योंकि ब्राउज़र में पहले से ही यह है)। अन्यथा यह वास्तव में सर्वर से पुनः लोड किया जाएगा। – BalusC

+0

मैं तुम्हारा बिंदु देखता हूं, मैंने फिर से प्रस्तुत करने वाले हिस्से को स्पष्ट किया। – BalusC

1

यह लिखने के लिए सही तरीके से अपने ज के अंदर उपयोग लक्ष्य = "सिर" है: innerfile.xhtml पर outputScript घोषणा:

<ui:composition ... > 
    <h:outputScript library="js" target="head" name="jquery-1.6.2.js" /> 
    <h:outputScript library="js" target="head" name="inner.js" /> 
    <h:panelGroup> 
     I Am Text in The Inner File! 
    </h:panelGroup> 
</ui:composition> 

कि जिस तरह से अपने सभी संसाधन घोषणाओं बाहरी अंदर रखा जाना होगा। एक ही पुस्तकालय/संसाधन नाम के साथ एक ही संसाधन की कई घोषणाएं एक ही घोषणा को कई बार प्रस्तुत नहीं करतीं, क्योंकि एच के लिए रेंडरर: आउटपुटस्क्रिप्ट में कुछ कोड होता है जो डुप्लिकेट प्रविष्टियों को अनदेखा करता है और अनदेखा करता है। नोट यदि आप एच प्रस्तुत करते हैं तो चीजें अलग होती हैं: outputScript जो जावास्क्रिप्ट फ़ाइल का संदर्भ नहीं देता है।

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