আসলে, ওয়েবে এই সমস্ত উদাহরণ যেখানে "js", "CSS", "img" ইত্যাদির মতো সাধারণ বিষয়বস্তু / ফাইল টাইপ ব্যবহার করা হয় তা বিভ্রান্তিকর ।
বাস্তব বিশ্বের উদাহরণ
শুরু করার জন্য, মত কিভাবে বিদ্যমান JSF বাস্তবায়নের যাক চেহারা Mojarra এবং MyFaces মত JSF উপাদান লাইব্রেরি PrimeFaces এবং OmniFaces এটি ব্যবহার। তাদের মধ্যে কেউ এইভাবে সংস্থান লাইব্রেরি ব্যবহার করে না। তারা নিম্নলিখিত উপায়ে (কভারগুলির নীচে, দ্বারা @ResourceDependency
বা UIViewRoot#addComponentResource()
) ব্যবহার করে:
<h:outputScript library="javax.faces" name="jsf.js" />
<h:outputScript library="primefaces" name="jquery/jquery.js" />
<h:outputScript library="omnifaces" name="omnifaces.js" />
<h:outputScript library="omnifaces" name="fixviewstate.js" />
<h:outputScript library="omnifaces.combined" name="[dynamicname].js" />
<h:outputStylesheet library="primefaces" name="primefaces.css" />
<h:outputStylesheet library="primefaces-aristo" name="theme.css" />
<h:outputStylesheet library="primefaces-vader" name="theme.css" />
এটি স্পষ্ট হয়ে উঠতে হবে যে এটি মূলত সাধারণ লাইব্রেরি / মডিউল / থিমের নাম উপস্থাপন করে যেখানে resources সমস্ত সংস্থান সাধারণত ব্যবহৃত হয়।
আরও সহজ সনাক্তকরণ
এই সংস্থানগুলি কোথায় এবং / বা কোথা থেকে এসেছে সেগুলি নির্দিষ্ট করা এবং পার্থক্য করা এত সহজ easier কল্পনা করুন যে primefaces.css
আপনার নিজের ওয়েব অ্যাপে এমন একটি সংস্থান রয়েছে যা আপনি প্রাইমফ্রিজের কোনও ডিফল্ট সিএসএসকে ওভাররাইড / ফিনেটুনিং করছেন; যদি প্রাইমফ্রিজগুলি নিজের জন্য একটি লাইব্রেরির নাম ব্যবহার না করে primefaces.css
, তবে প্রাইমফ্রিজগুলির নিজস্ব কোনও লোড হবে না, পরিবর্তে ওয়েব অ্যাপ্লিকেশন সরবরাহকৃত একটি যা লুক'নফিলকে ভেঙে ফেলবে।
এছাড়াও, আপনি যখন কোনও কাস্টম ব্যবহার করছেন, সঠিকভাবে ব্যবহার করার সময় আপনি ResourceHandler
নির্দিষ্ট লাইব্রেরি থেকে আসা সংস্থাগুলির উপর আরও সূক্ষ্ম দানাদার নিয়ন্ত্রণ প্রয়োগ করতে পারেন library
। যদি সমস্ত উপাদান লাইব্রেরিগুলি তাদের সমস্ত জেএস ফাইলগুলির জন্য "জেএস" ব্যবহার করত, ResourceHandler
তবে এটি কোনও নির্দিষ্ট উপাদান লাইব্রেরি থেকে আসা হলে কীভাবে আলাদা হবে? উদাহরণগুলি হ'ল ওমনিফিস CombinedResourceHandler
এবং এবং GraphicResourceHandler
; createResource()
পদ্ধতিটি পরীক্ষা করে দেখুন যেখানে গ্রন্থাগারে পরবর্তী রিসোর্স হ্যান্ডলারকে অর্পণ করার আগে গ্রন্থাগারটি চেক করা আছে। এইভাবে তারা জানে কখন তৈরি করতে হয় CombinedResource
বা GraphicResource
উদ্দেশ্যে।
উল্লেখ করা উচিত যে রিচফ্রেসগুলি এটি ভুল করেছে। এটি library
কোনওটিই ব্যবহার করে নি এবং এটির উপরে অন্য একটি সংস্থান হ্যান্ডলিং স্তর হ'ল এবং তাই প্রোগ্রামালিমে রিচফ্রেসস সংস্থানগুলি সনাক্ত করা অসম্ভব। ঠিক এই কারণেই ওমনিফিসগুলি রিচফ্রেসস সংস্থাগুলির সাথে CombinedResourceHander
যে কোনও উপায়ে কাজ করার জন্য প্রতিবিম্ব-ভিত্তিক হ্যাক চালু করতে হয়েছিল ।
আপনার নিজের ওয়েব অ্যাপ
আপনার নিজের ওয়েব অ্যাপ্লিকেশনটির জন্য কোনও সংস্থান লাইব্রেরির প্রয়োজন হয় না। আপনি কেবল এটি বাদ দিতে চাই।
<h:outputStylesheet name="css/style.css" />
<h:outputScript name="js/script.js" />
<h:graphicImage name="img/logo.png" />
অথবা, যদি আপনার সত্যিই একটি প্রয়োজন হয় তবে আপনি এটিকে "ডিফল্ট" বা কোনও সংস্থার নামের মতো আরও বুদ্ধিমান সাধারণ নাম দিতে পারেন।
<h:outputStylesheet library="default" name="css/style.css" />
<h:outputScript library="default" name="js/script.js" />
<h:graphicImage library="default" name="img/logo.png" />
বা, যখন সংস্থানগুলি কিছু মাস্টার ফেসলেটস টেম্পলেটটির সাথে সুনির্দিষ্ট হয় আপনি এটিকে টেমপ্লেটের নামও দিতে পারেন, যাতে একে অপরের সাথে সম্পর্কিত হওয়া আরও সহজ। অন্য কথায়, এটি স্ব-ডকুমেন্টারি উদ্দেশ্যে আরও বেশি। যেমন একটি /WEB-INF/templates/layout.xhtml
টেমপ্লেট ফাইলে:
<h:outputStylesheet library="layout" name="css/style.css" />
<h:outputScript library="layout" name="js/script.js" />
এবং একটি /WEB-INF/templates/admin.xhtml
টেম্পলেট ফাইল:
<h:outputStylesheet library="admin" name="css/style.css" />
<h:outputScript library="admin" name="js/script.js" />
বাস্তব বিশ্বের উদাহরণের জন্য, ওমনিফিসগুলি শোকেস উত্স কোডটি পরীক্ষা করে দেখুন ।
অথবা, আপনি যখন একাধিক ওয়েব অ্যাপ্লিকেশনগুলিতে একই সংস্থানগুলি ভাগ করতে চান এবং সেই উত্তরটির ভিত্তিতে একই ভিত্তিতে একটি "সাধারণ" প্রকল্প তৈরি করেছেন যা ওয়েব অ্যাপ্লিকেশনে জেআর হিসাবে এম্বেড থাকে এবং /WEB-INF/lib
পরে এটি লাইব্রেরি হিসাবে উল্লেখ করে (নামটি আপনার পছন্দের জন্য নিখরচায়; ওমনিফিস এবং প্রাইমফ্রিজের মতো উপাদান লাইব্রেরিও সেভাবে কাজ করে):
<h:outputStylesheet library="common" name="css/style.css" />
<h:outputScript library="common" name="js/script.js" />
<h:graphicImage library="common" name="img/logo.png" />
লাইব্রেরির সংস্করণ
আর একটি প্রধান সুবিধা হ'ল আপনি নিজের ওয়েব অ্যাপ্লিকেশন দ্বারা সরবরাহিত সংস্থাগুলিতে সঠিক উপায়ে সংস্থান গ্রন্থাগারটির সংস্করণ প্রয়োগ করতে পারেন (এটি কোনও জারে এম্বেড থাকা সংস্থাগুলির জন্য কাজ করে না)। \d+(_\d+)*
সংস্থান লাইব্রেরি সংস্করণ বোঝাতে আপনি প্যাটার্নে একটি নাম সহ লাইব্রেরি ফোল্ডারে একটি সরাসরি শিশু সাবফোল্ডার তৈরি করতে পারেন ।
WebContent
|-- resources
| `-- default
| `-- 1_0
| |-- css
| | `-- style.css
| |-- img
| | `-- logo.png
| `-- js
| `-- script.js
:
এই মার্কআপটি ব্যবহার করার সময়:
<h:outputStylesheet library="default" name="css/style.css" />
<h:outputScript library="default" name="js/script.js" />
<h:graphicImage library="default" name="img/logo.png" />
এটি v
প্যারামিটার হিসাবে লাইব্রেরি সংস্করণ সহ নিম্নলিখিত এইচটিএমএল উত্পাদন করবে :
<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml?ln=default&v=1_0" />
<script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml?ln=default&v=1_0"></script>
<img src="/contextname/javax.faces.resource/img/logo.png.xhtml?ln=default&v=1_0" alt="" />
সুতরাং, যদি আপনি কিছু সংস্থান সম্পাদনা / আপডেট করে থাকেন, তবে আপনাকে যা করতে হবে তা হ'ল সংস্করণ ফোল্ডারটিকে নতুন মান হিসাবে অনুলিপি করা বা নামকরণ করা। আপনার যদি একাধিক সংস্করণ ফোল্ডার থাকে, তবে জেএসএফ ResourceHandler
সংখ্যাসূচক অর্ডারিং বিধি অনুসারে স্বয়ংক্রিয়ভাবে সর্বোচ্চ সংস্করণ নম্বর থেকে রিসোর্সটি সরবরাহ করবে।
সুতরাং, resources/default/1_0/*
ফোল্ডারটি অনুলিপি / পুনঃনামকরণ করার সময় resources/default/1_1/*
নীচের মত:
WebContent
|-- resources
| `-- default
| |-- 1_0
| | :
| |
| `-- 1_1
| |-- css
| | `-- style.css
| |-- img
| | `-- logo.png
| `-- js
| `-- script.js
:
তারপরে শেষ চিহ্নআপ উদাহরণটি নিম্নলিখিত HTML তৈরি করবে:
<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml?ln=default&v=1_1" />
<script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml?ln=default&v=1_1"></script>
<img src="/contextname/javax.faces.resource/img/logo.png.xhtml?ln=default&v=1_1" alt="" />
পরিবর্তিত প্যারামিটারের সাথে ইউআরএল প্রথমবারের জন্য অনুরোধ করা হলে এটি ওয়েব ব্রাউজারকে ক্যাশে থেকে একই নামের একটিটি না দেখানোর পরিবর্তে সার্ভার থেকে সরাসরি সংস্থানটি অনুরোধ করতে বাধ্য করবে। এভাবে আপডেট সিএসএস / জেএস রিসোর্স পুনরুদ্ধার করতে গেলে এন্ডিউজারগুলিকে একটি হার্ড রিফ্রেশ (Ctrl + F5 ইত্যাদি) করার প্রয়োজন হয় না।
দয়া করে মনে রাখবেন যে জেআর ফাইলটিতে আবদ্ধ সংস্থাগুলির জন্য গ্রন্থাগারের সংস্করণ সম্ভব নয়। আপনার একটি প্রথা দরকার ResourceHandler
। জারে সংস্থানগুলির জন্য কীভাবে জেএসএফ সংস্করণ ব্যবহার করবেন তা দেখুন ।
আরো দেখুন: