জেএসএফ ২.০ ফেসলেট ব্যবহার করে কীভাবে এক্সএইচটিএমএলে অন্য একটি এক্সএইচটিএমএল অন্তর্ভুক্ত করবেন?


218

কোনও এক্সএইচটিএমএল পৃষ্ঠায় অন্য একটি এক্সএইচটিএমএল পৃষ্ঠা অন্তর্ভুক্ত করার সবচেয়ে সঠিক উপায় কী? আমি বিভিন্ন উপায়ে চেষ্টা করেছি, তাদের কেউই কাজ করছে না।

উত্তর:


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>ভিতরে যে হিসাবে ফাইলের অন্তর্ভুক্ত অন্যথায় স্থাপিত হবে অবৈধ এইচটিএমএল

আপনি এতে ডায়নামিক ইএল এক্সপ্রেশন ব্যবহার করতে পারেন <ui:include src>। আরও দেখুন কীভাবে অজেক্স-রিফ্রেশ ডায়নামিকের মধ্যে নেভিগেশন মেনুতে সামগ্রী অন্তর্ভুক্ত করা যায়? (জেএসএফ এসপিএ)


<ui:define>/<ui:insert>

সহ আরো উন্নত উপায় টেমপ্লেট । এর মধ্যে মূলত অন্যভাবে রাউন্ড অন্তর্ভুক্ত রয়েছে। মাস্টার টেমপ্লেট পৃষ্ঠাটি <ui:insert>সংজ্ঞায়িত টেম্পলেট সামগ্রী সন্নিবেশ করানোর জন্য স্থানগুলি ঘোষণার জন্য ব্যবহার করা উচিত । মাস্টার টেমপ্লেট পৃষ্ঠাটি ব্যবহার করা টেম্পলেট ক্লায়েন্ট পৃষ্ঠাটি <ui:define>theোকানো টেম্পলেট বিষয়বস্তু সংজ্ঞায়িত করতে ব্যবহার করা উচিত ।

মাস্টার টেম্পলেট পৃষ্ঠা /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>। আরও দেখুন JSF 2: কিভাবে একটি যুক্তি Facelets সাব দৃশ্যে প্রার্থনা করা সহ একটি কর্ম পাস (UI ব্যবহার করছে: অন্তর্ভুক্ত এবং UI: PARAM)?


ডিজাইন ইঙ্গিত

যে ফাইলগুলি কেবলমাত্র তার URL লিখে / অনুমান করার মাধ্যমে সর্বজনীনভাবে অ্যাক্সেসযোগ্য হওয়ার কথা নয়, তাদের /WEB-INFফোল্ডারে স্থাপন করা দরকার যেমন উপরের উদাহরণে অন্তর্ভুক্ত ফাইল এবং টেমপ্লেট ফাইলের মতো। আরও দেখুন যে কোন এক্সএইচটিএমএল ফাইলগুলিকে আমার / ওয়েবে-আইএনএফ লাগাতে হবে এবং কোনটি নয়?

বাইরে <ui:composition>এবং এর বাইরে কোনও মার্কআপ (HTML কোড) থাকার দরকার নেই <ui:define>। আপনি যে কোনও রাখতে পারেন তবে সেগুলি ফেসলেট দ্বারা উপেক্ষা করা হবে। সেখানে মার্কআপ রাখা কেবল ওয়েব ডিজাইনারদের জন্যই কার্যকর। আরও দেখুন কী পুরো প্রকল্পটি তৈরি না করে কোনও জেএসএফ পৃষ্ঠা চালানোর কোনও উপায় আছে?

এইচটিএমএল 5 ডক্টাইপ হ'ল এটি একটি এক্সএইচটিএমএল ফাইল "সত্ত্বেও" এই দিনগুলিতে প্রস্তাবিত ডক্টাইপ। এক্সএইচটিএমএলকে এমন একটি ভাষা হিসাবে দেখতে পাওয়া উচিত যা আপনাকে এক্সএমএল ভিত্তিক সরঞ্জাম ব্যবহার করে এইচটিএমএল আউটপুট উত্পাদন করতে দেয়। আরও দেখুন কী এইচটিএমএল 4/5 দিয়ে জেএসএফ + ফেসলেট ব্যবহার করা সম্ভব? এবং জাভা সার্ভারের মুখগুলি ২.২ এবং এইচটিএমএল 5 সমর্থন, কেন এখনও এক্সএইচটিএমএল ব্যবহৃত হচ্ছে

সিএসএস / জেএস / চিত্র ফাইলগুলিকে গতিশীল স্থানান্তরিত / স্থানীয়করণ / সংস্করণযুক্ত সংস্থান হিসাবে অন্তর্ভুক্ত করা যেতে পারে। ফেসলেটস টেমপ্লেটে সিএসএস / জেএস / চিত্রের সংস্থানটি কীভাবে উল্লেখ করতে হয় তা দেখুন ?

আপনি ফেসলেট ফাইলগুলিকে পুনরায় ব্যবহারযোগ্য জেআর ফাইলটিতে রাখতে পারেন। ভাগ করা কোড সহ একাধিক জেএসএফ প্রকল্পগুলির কাঠামোটিও দেখুন ।

উন্নত ফেসলেটগুলির টেম্প্লেটিংয়ের বাস্তব বিশ্বের উদাহরণগুলির জন্য src/main/webapp, জাভা ইই কিকফ অফ অ্যাপ্লিকেশন উত্স কোড এবং ওমনিফিসগুলি সাইটের উত্স কোড প্রদর্শন করে


1
হাই বালাস, সম্পর্কিত: সর্বাধিক প্রাথমিক উপায় হ'ল <ui: অন্তর্ভুক্ত>। অন্তর্ভুক্ত সামগ্রীটি <ui: রচনা> এর ভিতরে রাখতে হবে placed আমি অন্তর্ভুক্ত বিষয়বস্তু কেবল <p> </p> এ থাকতে পারে এটি কাজ করবে thing
Koray Tugay

1
@ কোরেতুগায়: হ্যাঁ, এটা ঠিক। ui: রচনাটি কেবলমাত্র একটি) টেমপ্লেট ব্যবহার (উপরে দেখুন), বা খ) <html> <body> এ সমস্ত কিছু মোড়ানোর জন্য আপনি কোনও ব্রাউজার বা এইচটিএমএল সম্পাদক দিয়ে ফাইলটি লোড করতে পারেন composition
sleske

হাই আপনি কি আমার জন্য এই ধাঁধা সমাধান করতে পারেন? আমি গত 3 দিন থেকে আমার মাথা বেজায় আছি। stackoverflow.com/questions/24738079/…
কিশোর প্রকাশ

1
@ ওডিসিয়াস: এটি আসলে কোনও রচনা না হলে নয়।
বালুসসি

1
আফাইক যদি কেবল <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 declaredএইচটিএমএল সত্তা ব্যবহার করার সময় আপনি একটি ত্রুটি পান get
ক্রিস্টোফস

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উপরে বর্ণিত হিসাবে আপনার অন্তর্ভুক্ত xhtml ফাইল শুরু করুন ।
  • ui:includeউপরের চিত্র হিসাবে আপনি xhtml ফাইল সহ সেই ফাইলটি অন্তর্ভুক্ত করবেন ।

কখনও কখনও আপনি কেবল একটি ফাইলের নাম ব্যবহার করার সময় পথটি সনাক্ত করার পক্ষে এটি যথেষ্ট নয়। তাদের জন্য, যারা উপরে ফাইল অন্তর্ভুক্তি চেষ্টা করেছিলেন এবং এটি কার্যকর হয়নি। আপনি ফাইলের নাম বা / WEB-INF ডিরেক্টরি আগে স্ল্যাশ চিহ্ন যোগ করার চেষ্টা করতে পারেন। সুতরাং এটির মতো <ui:include src="/yourFile.xhtml"/>বা<ui:include src="/WEB-INF/yourFile.xhtml"/>
লেফান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.