JSHTML 2.0 फेसलेट का उपयोग करके XHTML में XHTML कैसे शामिल करें?


218

XHTML पृष्ठ में किसी अन्य XHTML पृष्ठ को शामिल करने का सबसे सही तरीका क्या है? मैं विभिन्न तरीकों से कोशिश कर रहा हूं, उनमें से कोई भी काम नहीं कर रहा है।

जवाबों:


423

<ui:include>

सबसे बुनियादी तरीका है <ui:include>। शामिल सामग्री को अंदर रखा जाना चाहिए <ui:composition>

मास्टर पृष्ठ का किकऑफ उदाहरण /page.xhtml:

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title>Include demo</title>
    </h:head>
    <h:body>
        <h1>Master page</h1>
        <p>Master page blah blah lorem ipsum</p>
        <ui:include src="/WEB-INF/include.xhtml" />
    </h:body>
</html>

पृष्ठ शामिल करें /WEB-INF/include.xhtml(हाँ, यह अपनी संपूर्णता में फ़ाइल है, बाहर के कोई भी टैग <ui:composition>अनावश्यक हैं क्योंकि उन्हें फेसलेट्स द्वारा वैसे भी अनदेखा किया जाता है):

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h2>Include page</h2>
    <p>Include page blah blah lorem ipsum</p>
</ui:composition>
  

इसके द्वारा खोलने की आवश्यकता है /page.xhtml। ध्यान दें कि आपको दोहराने की आवश्यकता नहीं है <html>, <h:head>और <h:body>इसमें शामिल फ़ाइल के रूप में अन्यथा अमान्य HTML में परिणाम होगा ।

आप एक गतिशील ईएल अभिव्यक्ति का उपयोग कर सकते हैं <ui:include src>। यह भी देखें कि नेविगेशन मेनू द्वारा कैसे अजाक्स-रिफ्रेश डायनामिक में सामग्री शामिल है? (जेएसएफ एसपीए)


<ui:define>/<ui:insert>

सहित का एक और अधिक उन्नत तरीका अस्थायी है । इसमें मूल रूप से दूसरा तरीका शामिल है। मास्टर टेम्पलेट पेज को <ui:insert>परिभाषित टेम्पलेट सामग्री डालने के लिए स्थानों की घोषणा करने के लिए उपयोग करना चाहिए । टेम्प्लेट क्लाइंट पेज जो मास्टर टेम्प्लेट पेज का उपयोग <ui:define>कर रहा है, उसे टेम्प्लेट सामग्री को सम्मिलित करने के लिए उपयोग करना चाहिए जिसे डाला जाना है।

मास्टर टेम्प्लेट पृष्ठ /WEB-INF/template.xhtml(एक डिज़ाइन संकेत के रूप में: शीर्ष लेख, मेनू और पाद लेख बदले में <ui:include>फ़ाइलें भी हो सकते हैं):

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title><ui:insert name="title">Default title</ui:insert></title>
    </h:head>
    <h:body>
        <div id="header">Header</div>
        <div id="menu">Menu</div>
        <div id="content"><ui:insert name="content">Default content</ui:insert></div>
        <div id="footer">Footer</div>
    </h:body>
</html>

टेम्प्लेट क्लाइंट पेज /page.xhtml( templateविशेषता पर ध्यान दें ; यहां भी, यह संपूर्णता में फ़ाइल है):

<ui:composition template="/WEB-INF/template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

    <ui:define name="title">
        New page title here
    </ui:define>

    <ui:define name="content">
        <h1>New content here</h1>
        <p>Blah blah</p>
    </ui:define>
</ui:composition>

इसके द्वारा खोलने की आवश्यकता है /page.xhtml। यदि कोई नहीं है <ui:define>, तो अंदर डिफ़ॉल्ट सामग्री <ui:insert>प्रदर्शित की जाएगी, यदि कोई हो।


<ui:param>

आप मापदंडों को <ui:include>या इसके <ui:composition template>द्वारा पारित कर सकते हैं <ui:param>

<ui:include ...>
    <ui:param name="foo" value="#{bean.foo}" />
</ui:include>
<ui:composition template="...">
    <ui:param name="foo" value="#{bean.foo}" />
    ...
</ui:composition >

शामिल / टेम्पलेट फ़ाइल के अंदर, यह उपलब्ध होगा #{foo}। यदि आपको "कई" मापदंडों को पास करने की आवश्यकता है <ui:include>, तो आप शामिल फ़ाइल को टैगफाइल के रूप में पंजीकृत करने पर बेहतर विचार करेंगे, ताकि आप अंततः इसका उपयोग कर सकें <my:tagname foo="#{bean.foo}">। यह भी देखें कि कब उपयोग करना है <ui: शामिल करें>, टैग फ़ाइलें, मिश्रित घटक और / या कस्टम घटक?

तुम भी पूरे सेम, विधियों और मापदंडों के माध्यम से पारित कर सकते हैं <ui:param>जेएसएफ 2 भी देखें : फेसलेट्स उप दृश्य (यूआई: शामिल और यूआई: परम) का उपयोग करने के लिए एक तर्क सहित एक कार्रवाई कैसे पारित करें?


डिजाइन संकेत

जिन फ़ाइलों को केवल अपने URL में प्रवेश / अनुमान लगाकर सार्वजनिक रूप से पहुंच योग्य नहीं माना जाता है, उन्हें /WEB-INFफ़ोल्डर में रखने की आवश्यकता होती है , जैसे ऊपर फ़ाइल और टेम्पलेट फ़ाइल को उपरोक्त उदाहरण में शामिल करें। यह भी देखें कि मुझे कौन सी XHTML फाइलें / WEB-INF और कौन सी नहीं डालनी हैं?

बाहर किसी भी मार्कअप (HTML कोड) <ui:composition>और होने की आवश्यकता नहीं है <ui:define>। आप कोई भी डाल सकते हैं, लेकिन उन्हें फेसलेट्स द्वारा अनदेखा किया जाएगा। वहां मार्कअप लगाना केवल वेब डिजाइनरों के लिए उपयोगी है। यह भी देखें कि क्या पूरी परियोजना का निर्माण किए बिना JSF पेज चलाने का कोई तरीका है?

HTML5 सिद्धांत इन दिनों अनुशंसित सिद्धांत है, "इसके बावजूद कि यह एक XHTML फ़ाइल है। आपको XHTML को एक भाषा के रूप में देखना चाहिए जो आपको XML आधारित टूल का उपयोग करके HTML आउटपुट का उत्पादन करने की अनुमति देता है। यह भी देखें कि क्या HTML 4/5 के साथ JSF + फेसलेट का उपयोग करना संभव है? और JavaServer चेहरे 2.2 और HTML5 का समर्थन करता है, XHTML अभी भी क्यों इस्तेमाल किया जा रहा है

CSS / JS / छवि फ़ाइलों को गतिशील रूप से स्थानांतरित करने योग्य / स्थानीय / संस्करणित संसाधनों के रूप में शामिल किया जा सकता है। यह भी देखें कि फेसलेट्स टेम्पलेट में CSS / JS / छवि संसाधन कैसे देखें ?

आप फेसलेट फ़ाइलों को एक पुन: प्रयोज्य JAR फ़ाइल में रख सकते हैं। साझा कोड के साथ कई JSF परियोजनाओं के लिए संरचना भी देखें ।

उन्नत फेसलेट्स टेम्प्लेटिंग के वास्तविक विश्व उदाहरणों के लिए, जावा ईई किकऑफ़ ऐप स्रोत कोड और ओम्नीफेस शोकेस साइट स्रोत कोड के src/main/webappफ़ोल्डर की जांच करें ।


1
हाय बालुस, के बारे में: सबसे बुनियादी तरीका है <ui: शामिल>। शामिल सामग्री को <ui: रचना> के अंदर रखा जाना चाहिए। मुझे लगता है कि इसमें शामिल सामग्री केवल <p> </ p> में हो सकती है।
कोरे तुगे

1
@ कोरयटगय: हाँ, यह सही है। ui: रचना केवल एक आवश्यक है) <html> <body> में सब कुछ लपेटने के लिए टेम्पलेट (ऊपर देखें), या b) का उपयोग करें ताकि आप फ़ाइल को ब्राउज़र या HTML संपादक के साथ लोड कर सकें।
सालेस्के

नमस्ते क्या आप मेरे लिए इस पहेली को हल कर सकते हैं? मैं पिछले 3 दिनों से अपना सिर पीट रहा हूं। stackoverflow.com/questions/24738079/…
किशोर प्रकाश

1
@ ओडीसियस: नहीं अगर यह वास्तव में एक रचना है।
बालुसक

1
Afaik यदि केवल <ui:composition ...>मुखपत्र के अंदर घोषणा करते हैं तो आपको <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">भी इस तरह के सिद्धांत की घोषणा करनी होगी , अन्यथा entity referenced but not declaredHTML संस्थाओं का उपयोग करते समय आपको एक त्रुटि मिलती है।
क्रिस्टोफ़्स

24

शामिल पृष्ठ:

<!-- opening and closing tags of included page -->
<ui:composition ...>
</ui:composition>

पेज सहित:

<!--the inclusion line in the including page with the content-->
<ui:include src="yourFile.xhtml"/>
  • आप अपनी शामिल की गई एक्सएचटीएमएल फ़ाइल को ui:compositionऊपर दिखाए गए अनुसार शुरू करते हैं ।
  • आप उस फ़ाइल ui:includeको शामिल करते हैं जिसमें xHTML फ़ाइल शामिल है जैसा कि ऊपर दिखाया गया है।

कभी-कभी केवल फ़ाइल नाम का उपयोग करते समय पथ की पहचान करना पर्याप्त नहीं होता है। उन लोगों के लिए, जिन्होंने ऊपर फ़ाइल को शामिल करने की कोशिश की और यह काम नहीं किया। आप फ़ाइल नाम या WEB-INF निर्देशिका से पहले स्लैश प्रतीक जोड़ने का प्रयास कर सकते हैं। तो यह की तरह लग रहा <ui:include src="/yourFile.xhtml"/>है या<ui:include src="/WEB-INF/yourFile.xhtml"/>
Lefan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.