<Ui: অন্তর্ভুক্ত>, ট্যাগ ফাইল, সংমিশ্রিত উপাদান এবং / অথবা কাস্টম উপাদানগুলি কখন ব্যবহার করবেন?


102

আমি সম্প্রতি ফেসলেটগুলির সাথে জেএসএফ ২.০ ব্যবহার শুরু করেছি <ui:include>এবং ফেসলেটস ১. এক্স দ্বারা প্রদত্ত বিদ্যমান এবং অন্যান্য টেম্প্লেটিং কৌশলগুলি জেনে নতুন সংমিশ্রণ উপাদানগুলি দ্বারা বিস্মিত হয়ে গেলাম

এই পদ্ধতির মধ্যে পার্থক্য কি? কার্যত তারা এগুলি সম্পর্কে প্রস্তাব দেয় বলে মনে হচ্ছে: <ui:param>বনাম <cc:attribute>, <ui:insert>+ <ui:define>বনাম ট্যাগ ফাইল, বিদ্যমান টেম্পলেটগুলির পুনরায় ব্যবহার। যৌগিক উপাদানগুলির ক্ষেত্রে সিনট্যাক্স এবং পরিষ্কার ইন্টারফেসের স্পেসিফিকেশন ছাড়াও কি কিছু আছে? পারফরম্যান্স আলাদা হতে পারে?

উত্তর:


176

এই পদ্ধতির মধ্যে পার্থক্য কি?

ফেসলেট টেম্পলেট

ব্যবহারের Facelet (হিসাবে টেমপ্লেট <ui:composition>, <ui:include>এবং <ui:decorate>) আপনি reuseable টেমপ্লেট মধ্যে প্রধান পৃষ্ঠার লেআউট টুকরা বিভক্ত করতে চান। যেমন শিরোনাম, মেনু, সামগ্রী, পাদচরণ ইত্যাদি er

উদাহরণ:

ফেসলেট ট্যাগ ফাইল

কোড ডুপ্লিকেশন রোধ / হ্রাস করতে আপনার যদি পুনরায় ব্যবহারযোগ্য গ্রুপের উপাদান থাকতে চান তবে ফেসলেট ট্যাগ ফাইলগুলি ব্যবহার করুন। যেমন লেবেল + ইনপুট + বার্তা উপাদানগুলির একটি গ্রুপ। সম্মিলিত উপাদানগুলির সাথে প্রধান পার্থক্যটি হ'ল কোনও ফেসলেট ট্যাগ ফাইলের আউটপুট কোনও একককে উপস্থাপন করে না UIComponentএবং কোনও পরিস্থিতিতে যখন কোনও সংমিশ্রণ উপাদান যথেষ্ট না হয় তখন একমাত্র সমাধান হতে পারে। সাধারণত, <ui:include>এক বা <ui:param>একাধিকটির সাথে ম্যানেজ করা শিমের সম্পত্তি (এবং এইভাবে একটি হার্ডকোডযুক্ত মান নয়) পাস করে এমন একটি সংকেত যা অন্তর্ভুক্ত ফাইলটি একটি ট্যাগ ফাইল হতে পারে।

উদাহরণ:

যৌগিক উপাদান

আপনি যদি UIComponentখাঁটি এক্সএমএল ব্যবহার করে একক দায়বদ্ধতার সাথে একটি একক এবং পুনঃব্যবহারযোগ্য কাস্টম তৈরি করতে চান তবে সম্মিলিত উপাদানগুলি ব্যবহার করুন । এই জাতীয় একটি যৌগিক উপাদান সাধারণত বিদ্যমান উপাদান এবং / অথবা এইচটিএমএলগুলির একগুচ্ছ থাকে এবং শারীরিকভাবে একক উপাদান হিসাবে উপস্থাপিত হয় এবং একক শিমের সম্পত্তিতে আবদ্ধ বলে মনে করা হয়। যেমন একটি উপাদান যা একটি একক প্রতিনিধিত্ব করে java.util.Date3 নির্ভরশীল দ্বারা সম্পত্তি <h:selectOneMenu>উপাদান, বা উপাদান সম্মিলন <p:fileUpload>এবং <p:imageCropper>একটি একক মধ্যে <my:uploadAndCropImage>একটি একক কাস্টম উল্লেখ com.example.Imageসম্পত্তি হিসেবে সত্তা।

উদাহরণ:

কাস্টম উপাদান

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

ট্যাগ হ্যান্ডলার

আপনি যখন এইচটিএমএল আউটপুট উপস্থাপনের পরিবর্তে জেএসএফ উপাদান উপাদানটির বিল্ডিং নিয়ন্ত্রণ করতে চান, তখন আপনাকে কোনও উপাদানটির পরিবর্তে ট্যাগ হ্যান্ডলার ব্যবহার করা উচিত।

উদাহরণ:

উদাহরণ প্রকল্প

এখানে কিছু উদাহরণ প্রকল্প রয়েছে যা উপরে উল্লিখিত সমস্ত কৌশল ব্যবহার করে।


পারফরম্যান্স আলাদা হতে পারে?

প্রযুক্তিগতভাবে, পারফরম্যান্স উদ্বেগ নগণ্য। পছন্দটি কংক্রিটের কার্যকরী প্রয়োজনীয়তা এবং বাস্তবায়নের বিমূর্ততা, পুনরায় ব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণের চূড়ান্ত ডিগ্রির ভিত্তিতে করা উচিত। প্রতিটি পদ্ধতির নিজস্ব নির্ধারিত উদ্দেশ্য এবং সীমাবদ্ধতা রয়েছে।

যৌথ উপাদানগুলির ভিউ নির্মাণ / পুনরুদ্ধারকালে (বিশেষত: দৃশ্যের সংরক্ষণ / পুনরুদ্ধারের সময়) একটি উল্লেখযোগ্য ওভারহেড থাকে। এবং মোজারার পুরানো সংস্করণগুলিতে, সম্মিলিত উপাদানগুলির ডিফল্ট মানগুলি নির্ধারণের ক্ষেত্রে পারফরম্যান্সের সমস্যা ছিল, এটি ইতিমধ্যে ২.১.১৩ থেকে ঠিক করা হয়েছে। এছাড়াও, মোজারার একটি মেমরি ফুটো ছিল যখন কোনও <cc:attribute method-signature>পদ্ধতিতে প্রকাশের জন্য ব্যবহৃত হয়, মূলত পুরো উপাদান গাছটি এইচটিটিপি সেশনে পুনরায় উল্লেখ করা হয়, এটি ২.১.২৯ / ২.২.৮ থেকে স্থির হয়েছে। মেমরি ফুটো নীচের মত পুরানো 2.1 সংস্করণে বাইপাস করা যেতে পারে:

<context-param>
    <param-name>com.sun.faces.serializeServerState</param-name>
    <param-value>true</param-value>
</context-param>

বা নীচের মত পুরানো ২.২ সংস্করণে:

<context-param>
    <param-name>javax.faces.SERIALIZE_SERVER_STATE</param-name>
    <param-value>true</param-value>
</context-param>

তবুও, যখন আপনার তুলনামূলকভাবে "প্রচুর" সংমিশ্রণ উপাদান থাকে এবং আপনি javax.faces.STATE_SAVING_METHODসেট clientকরে রেখেছেন, তখন সম্পাদনাটি ব্যথা হবে। সম্মিলিত উপাদানগুলি অপব্যবহার করবেন না যদি আপনি কেবলমাত্র প্রাথমিক অন্তর্ভুক্ত ফাইল বা ট্যাগ ফাইল সহ ইতিমধ্যে সম্ভব বুনিয়াদি কার্যকারিতা চান। *.taglib.xmlট্যাগ ফাইলের চেয়ে সম্মিলিত উপাদানগুলি পছন্দ করার অজুহাত হিসাবে কনফিগারেশনের স্বাচ্ছন্দ্য (পড়ুন: কোনও ফাইলের প্রয়োজন নেই) ব্যবহার করবেন না ।

মোজাররা ২.২.১০ বা তার বেশি বয়সী ব্যবহার করার সময়, উত্পাদন মোডের জন্য তুলনামূলকভাবে সংক্ষিপ্ত ফেসলেটগুলি রিফ্রেশ সময়কাল অক্ষম করতে ভুলবেন না:

<context-param>
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
    <param-value>-1</param-value>
</context-param>

উন্নয়নের জন্য এই সেটিংটি ব্যবহার করবেন না, অন্যথায় আপনাকে ফেসলেট ফাইলগুলিতে প্রতিফলিত হওয়ার জন্য পরিবর্তন পেতে পুরো সার্ভারটি পুনরায় চালু করতে হবে! মোজাররা ২.২.১১ এবং আরও নতুন এবং মাইফিসগুলি ইতিমধ্যে -1কখন javax.faces.PROJECT_STAGEসেট করা নেই তা ডিফল্ট Development


কেন আপনি 3 (ফেসলেট ট্যাগ ফাইল) বলার পরিবর্তে 1 টি উপাদান (যৌগিক উপাদান) রেন্ডার করতে চান? আমার অর্থ ঠিক আছে, রৌদ্রোজ্জ্বল দিনে আপনি সম্ভবত 3 এর পরিবর্তে 1 এর মতো বোধ করবেন ... তবে আমার ধারণা এর পিছনে আরও কিছু আছে something আপনার উদাহরণে আপনি ইউআইএনমিংকন্টেইনারকে প্রসারিত করছেন ... সিসি যাওয়ার কোনও কারণ হতে পারে (যাতে কিছু জেএসএফ বাস্তবায়ন নির্দিষ্ট ফাংশনগুলিকে ওভাররাইট করতে সক্ষম হতে পারে)?
তোসকান

4
একটি ট্যাগ ফাইলকে অন্তর্ভুক্ত করার ধরণ হিসাবে দেখা উচিত। একটি যৌগিক উপাদানটি একটি বাস্তব উপাদান হিসাবে দেখা উচিত। একটি যৌগিক উপাদান প্রয়োজন বাস্তবায়ন NamingContainer, অন্যথায় আপনি ডুপ্লিকেট আইডি সমস্যার যখন একই উপাদান একাধিক বার পুনঃব্যবহৃত করা হয় সঙ্গে শেষ।
বালুসক

@ বালুসসি বলি যে আমার কাছে এইচটিএমএল এবং জেএসএফের একটি গুচ্ছ রয়েছে যা একটি 'ব্লক' তৈরি করে যা আমাকে ঠিকানাগুলি যুক্ত করতে বা মুছে ফেলার অনুমতি দেয় (এবং এর সমস্ত বৈশিষ্ট্য: রাস্তা, নম্বর, শহর ইত্যাদি)। আমাকে একই ব্লকটি 2 বা 3 পৃষ্ঠায় ব্যবহার করতে হবে। এটি কি কোনও যৌগিক উপাদানগুলির বিবরণে পড়ে?
রিনালদোপিজে

4
@ রিনালদো: আমি মনে করি আমি স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৫7১1377১৮ / তে প্রদর্শিত গতিশীল জনবহুল উপাদান আইডি সহ একটি ট্যাগ ফাইল ব্যবহার করব । আইএমও, যদি এটি কোনও ট্যাগ ফাইল দিয়ে করা যায় তবে এটি ব্যবহার করুন। যদি এটি কোনও ট্যাগ ফাইল দিয়ে করা না যায় তবে একটি সংমিশ্রণ ব্যবহার করুন। যদি কোনও একক সম্পত্তি হস্তান্তর করার জন্য আপনার একাধিক উপাদানগুলির প্রয়োজন হয় (ঠিকানা নয় তবে উদাহরণস্বরূপ রাস্তার নাম + বাড়ির নাম্বার যা একক সম্পত্তিতে যেতে হবে), তবে একটি যৌগিক উপাদানই একমাত্র সমাধান হবে।
বালাসসি

4
@ তারিক: ট্যাগফিলের তুলনায় কমপোজিটের প্রচুর ওভারহেড রয়েছে। অন্য কথায়: খারাপ পারফরম্যান্স। ঘনিষ্ঠভাবে সম্পর্কিত বিদ্যমান উপাদানগুলির সেটগুলির ভিত্তিতে আপনার যদি একক কাস্টম UI উপাদান তৈরি করতে হয় তবেই এটি ব্যবহার করুন। এটি একটি ট্যাগ ফাইল দিয়ে করা যাবে না। উদাহরণস্বরূপ ZEEF.com এর একটি মাত্র যৌগিক রয়েছে: আপলোড / ডাউনলোড / ক্রপ চিত্র সর্ব-এক-এক জিনিস যা পৃষ্ঠার ছবি, প্রোফাইল পিকচার, লিংক ব্লক শিরোলেখ, ইমেজ ব্লক ইত্যাদিতে ব্যবহৃত হয় এটি কেবল একটি Imageসম্পত্তিতে আবদ্ধ শিমের মধ্যে
বালুসসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.