প্রকৃত ক্লায়েন্ট আইডির জন্য এইচটিএমএল আউটপুট দেখুন
সঠিক ক্লায়েন্ট আইডি খুঁজে পেতে আপনার উত্পন্ন HTML আউটপুট দেখতে হবে। ব্রাউজারে পৃষ্ঠাটি খুলুন, একটি ডান ক্লিক ক্লিক করুন এবং উত্স দেখুন । আগ্রহের জেএসএফ উপাদানটির এইচটিএমএল উপস্থাপনা সনাক্ত করুন এবং এটির idক্লায়েন্ট আইডি হিসাবে নিন। বর্তমান নামকরণের ধারকটির উপর নির্ভর করে আপনি এটি নিখুঁত বা আপেক্ষিক উপায়ে ব্যবহার করতে পারেন। নিম্নলিখিত অধ্যায় দেখুন।
নোট: যদি এটা পুনরাবৃত্তির সূচক মত ধারণ ঘটবে :0:, :1:, ইত্যাদি (কারণ এটি একটি iterating উপাদান ভিতরে), তারপর আপনি বুঝতে পারি যে একটি নির্দিষ্ট পুনরাবৃত্তির বৃত্তাকার আপডেট সবসময় সমর্থিত নয় প্রয়োজন। এ সম্পর্কে আরও তথ্যের জন্য উত্তরের নীচে দেখুন।
NamingContainerউপাদানগুলি মুখস্থ করুন এবং সর্বদা তাদের একটি নির্দিষ্ট আইডি দিন
আপনি যদি এজ্যাক্স প্রক্রিয়া / এক্সিকিউট / আপডেট / রেন্ডার করে কোনও উপাদানটি একই NamingContainerপ্যারেন্টের মধ্যে থাকেন তবে কেবল তার নিজস্ব আইডি রেফার করুন।
<h:form id="form">
<p:commandLink update="result"> <!-- OK! -->
<h:panelGroup id="result" />
</h:form>
যদি এটি একইরকম না হয়NamingContainer তবে আপনাকে পরম ক্লায়েন্ট আইডি ব্যবহার করে এটি উল্লেখ করতে হবে। একটি পরম ক্লায়েন্ট আইডি NamingContainerডিফল্টরূপে বিভাজক চরিত্রের সাথে শুরু হয় :।
<h:form id="form">
<p:commandLink update="result"> <!-- FAIL! -->
</h:form>
<h:panelGroup id="result" />
<h:form id="form">
<p:commandLink update=":result"> <!-- OK! -->
</h:form>
<h:panelGroup id="result" />
<h:form id="form">
<p:commandLink update=":result"> <!-- FAIL! -->
</h:form>
<h:form id="otherform">
<h:panelGroup id="result" />
</h:form>
<h:form id="form">
<p:commandLink update=":otherform:result"> <!-- OK! -->
</h:form>
<h:form id="otherform">
<h:panelGroup id="result" />
</h:form>
NamingContainerউপাদান উদাহরণস্বরূপ হয় <h:form>, <h:dataTable>, <p:tabView>, <cc:implementation>(সুতরাং, সব যৌগিক উপাদান), ইত্যাদি আপনি তাদেরকে সহজে উত্পন্ন এইচটিএমএল আউটপুট দিকে তাকিয়ে চিনতে, তাদের আইডি সব সন্তান উপাদান উত্পন্ন ক্লায়েন্ট ID আগে লেখা করা হবে না। মনে রাখবেন যে যখন তাদের কাছে একটি নির্দিষ্ট আইডি নেই, তখন জেএসএফ j_idXXXফর্ম্যাটে একটি অটোজেনারেটেড আইডি ব্যবহার করবে । তাদের নির্দিষ্ট আইডি দিয়ে আপনার একেবারে এড়ানো উচিত। OmniFacesNoAutoGeneratedIdViewHandler উন্নয়ন সময় এই সহায়ক হতে পারে।
আপনি যদি প্রশ্নযুক্ত জাভাদোকটি জানতে চান UIComponent, তবে আপনি এটি কেবল NamingContainerইন্টারফেস প্রয়োগ করে কিনা তা পরীক্ষা করে দেখতে পারেন । উদাহরণস্বরূপ, HtmlForm( UIComponentপিছনের <h:form>ট্যাগটি) এর প্রয়োগগুলি দেখায় NamingContainer, তবে HtmlPanelGroup( UIComponentপিছনের <h:panelGroup>ট্যাগটি) এটি দেখায় না, সুতরাং এটি প্রয়োগ করে না NamingContainer। এখানে সমস্ত স্ট্যান্ডার্ড উপাদানগুলির জাভাদোক এবং এখানে প্রাইমফ্রিজের জাভাদোক ।
আপনার সমস্যা সমাধান করা
সুতরাং আপনার ক্ষেত্রে:
<p:tabView id="tabs"><!-- This is a NamingContainer -->
<p:tab id="search"><!-- This is NOT a NamingContainer -->
<h:form id="insTable"><!-- This is a NamingContainer -->
<p:dialog id="dlg"><!-- This is NOT a NamingContainer -->
<h:panelGrid id="display">
<h:panelGrid id="display">দেখে মনে হচ্ছে উত্পন্ন এইচটিএমএল আউটপুট :
<table id="tabs:insTable:display">
আপনার ঠিক এটি idক্লায়েন্ট আইডি হিসাবে নিতে হবে এবং তারপরে :ব্যবহারের জন্য উপসর্গটি এখানে update:
<p:commandLink update=":tabs:insTable:display">
বাইরের রেফারেন্সিংয়ে / ট্যাগফিল / সংমিশ্রণ অন্তর্ভুক্ত
যদি এই কমান্ড লিঙ্কটি একটি অন্তর্ভুক্ত / ট্যাগফিলের মধ্যে থাকে এবং লক্ষ্যটি এর বাইরে থাকে এবং সুতরাং আপনি বর্তমান নামকরণের ধারকটির নামকরণ পাত্রের আইডিটি অগত্যা জানেন না তবে আপনি গতিবেগের সাথে এটির UIComponent#getNamingContainer()মতো উল্লেখ করতে পারেন:
<p:commandLink update=":#{component.namingContainer.parent.namingContainer.clientId}:display">
অথবা, যদি এই কমান্ড লিঙ্কটি একটি যৌগিক উপাদানগুলির মধ্যে থাকে এবং লক্ষ্যটি এর বাইরে থাকে:
<p:commandLink update=":#{cc.parent.namingContainer.clientId}:display">
অথবা, যদি কমান্ড লিঙ্ক এবং লক্ষ্য উভয়ই একই সংমিশ্রিত উপাদানগুলির মধ্যে থাকে:
<p:commandLink update=":#{cc.clientId}:display">
দেখুন রেন্ডার মধ্যে / আপডেট অ্যাট্রিবিউট জন্য টেমপ্লেটে পিতা বা মাতা নামকরণ পাত্রের আইডি পান
এটি কভারের নিচে কীভাবে কাজ করে
এই সব হিসাবে নির্দিষ্ট করা "অনুসন্ধান অভিব্যক্তি" মধ্যে javadoc :UIComponent#findComponent()
একটি অনুসন্ধানের অভিব্যক্তিটি হয় একটি সনাক্তকারী (যা কোনও এর আইডি সম্পত্তির সাথে হুবহু মিলে যায় UIComponent, বা এইরকম শনাক্তকারীর একটি UINamingContainer#getSeparatorCharচরিত্রের মানের সাথে মিলিত হয় The শেষ ফলাফল একই:
UIComponentনিম্নলিখিত শর্তগুলির যে কোনও একটি পূরণ হওয়ার সাথে সাথে থামিয়ে অনুসন্ধানের ভিত্তিটি চিহ্নিত করুন :
- যদি অনুসন্ধানের অভিব্যক্তিটি বিভাজক চরিত্রের সাথে শুরু হয় (একে "পরম" অনুসন্ধানের অভিব্যক্তি বলা হয়), বেসটি
UIComponentউপাদান গাছের মূল হবে । শীর্ষস্থানীয় বিভাজক চরিত্রটি কেটে ফেলা হবে, এবং অনুসন্ধানের বাকী বাকী অংশটি নীচে বর্ণিত হিসাবে "আপেক্ষিক" অনুসন্ধানের মত প্রকাশ হিসাবে গণ্য হবে।
- অন্যথায়, যদি এটি
UIComponentহয় তবে NamingContainerএটি ভিত্তি হিসাবে কাজ করবে।
- অন্যথায়, এই উপাদানটির পিতামাতাদের সন্ধান করুন। যদি
NamingContainerমুখোমুখি হয় তবে এটি বেস হবে।
- অন্যথায় (যদি
NamingContainerমুখোমুখি না হয়) মূলটি UIComponentবেস হবে।
- অনুসন্ধান এক্সপ্রেশন (সম্ভবত পূর্ববর্তী পদক্ষেপে সংশোধিত) এখন একটি "আপেক্ষিক" অনুসন্ধান এক্সপ্রেশন যা বেস উপাদানটির সুযোগের মধ্যে মেলে এমন একটি আইডি রয়েছে এমন উপাদানটি (যদি থাকে তবে) সনাক্ত করতে ব্যবহৃত হবে। ম্যাচটি নিম্নলিখিত হিসাবে সম্পাদিত হয়:
- যদি অনুসন্ধানের অভিব্যক্তিটি একটি সাধারণ শনাক্তকারী হয় তবে এই মানটিকে আইডি সম্পত্তির সাথে তুলনা করা হয়, এবং তারপরে পুনরাবৃত্তভাবে বেসের দিকগুলি এবং বাচ্চাদের মাধ্যমে
UIComponent(যদি কোনও বংশধর NamingContainerপাওয়া যায় তবে তার নিজস্ব দিকগুলি এবং শিশুদের সন্ধান করা হয় না)।
- যদি অনুসন্ধানের অভিব্যক্তিতে বিভাজক চরিত্র দ্বারা পৃথক করা একাধিক সনাক্তকারী অন্তর্ভুক্ত থাকে,
NamingContainerতবে পূর্ববর্তী বুলেট পয়েন্টে নিয়ম অনুসারে একটি সনাক্তকরণের জন্য প্রথম সনাক্তকারী ব্যবহার করা হয় । তারপরে, অনুসন্ধানের বাকী অংশটি পাস করে এর findComponent()পদ্ধতিটি NamingContainerবলা হবে।
নোট করুন যে প্রাইমফ্রিজসও জেএসএফের অনুপমকে মেনে চলে, তবে রিচফ্রিজস "কিছু অতিরিক্ত ব্যতিক্রম" ব্যবহার করে ।
"reRender" ব্যবহার UIComponent.findComponent()আলগোরিদিম (কিছু অতিরিক্ত ব্যাতিক্রম আছে) উপাদান গাছের উপাদান খুঁজে পেতে।
এই অতিরিক্ত ব্যতিক্রমগুলি বিশদে বর্ণিত কোথাও নেই, তবে এটি জানা যায় যে আপেক্ষিক উপাদান আইডিগুলি (যার সাথে শুরু :হয় না) কেবল নিকটতম পিতামাতার প্রসঙ্গেই অনুসন্ধান করা হয় না, একই দৃষ্টিভঙ্গিতে NamingContainerঅন্যান্য সমস্ত NamingContainerউপাদানগুলিতেও (যা তুলনামূলক তুলনামূলক উপায় দ্বারা ব্যয়বহুল কাজ)।
কখনও ব্যবহার করবেন না prependId="false"
যদি এগুলি এখনও কাজ না করে তবে আপনি ব্যবহার না করে যাচাই করুন <h:form prependId="false">। এটি এজাক্স জমা এবং রেন্ডার প্রক্রিয়াকরণের সময় ব্যর্থ হবে। এই সম্পর্কিত প্রশ্নটি আরও দেখুন: প্রিপেইন্ডআইডি = "মিথ্যা" বিরতি <ইউএফর্মের সাথে ইউআইফর্ম <ফ: এজ্যাক্স রেন্ডার> ।
পুনরাবৃত্তি উপাদানগুলির নির্দিষ্ট পুনরাবৃত্তির বৃত্ত উল্লেখ করে
এটা দীর্ঘ সময় জন্য রেফারেন্স একটি নির্দিষ্ট মত উপাদান iterating আইটেম iterated সম্ভব ছিল না <ui:repeat>এবং <h:dataTable>তাই মত:
<h:form id="form">
<ui:repeat id="list" value="#{['one','two','three']}" var="item">
<h:outputText id="item" value="#{item}" /><br/>
</ui:repeat>
<h:commandButton value="Update second item">
<f:ajax render=":form:list:1:item" />
</h:commandButton>
</h:form>
যাইহোক, মোজারা ২.২.৫ থেকে যেহেতু <f:ajax>এটি সমর্থন করা শুরু করেছিল (এটি কেবল এটি বৈধকরণ বন্ধ করে দিয়েছে; সুতরাং আপনি আর কোনও প্রশ্নের ব্যতিক্রম উল্লিখিত প্রশ্নের মুখোমুখি হতে পারবেন না; পরে এর জন্য আরও একটি বর্ধিতকরণের পরিকল্পনা করা হয়েছে)।
এটি কেবলমাত্র বর্তমান মাইফিসে ২.২..7 এবং প্রাইমফ্রিজ 5.2 সংস্করণে এখনও কাজ করে না। সমর্থনটি ভবিষ্যতের সংস্করণগুলিতে আসতে পারে। এদিকে ক্ষেত্রে, আপনার সেরা বাজি iterating উপাদান পারে, অথবা একটি পিতা বা মাতা ক্ষেত্রে এটি এইচটিএমএল রেন্ডার নয়, মত আপডেট করতে হয় <ui:repeat>।
প্রাইমফ্রিজ ব্যবহার করার সময়, অনুসন্ধান এক্সপ্রেশন বা নির্বাচক বিবেচনা করুন
প্রাইমফ্রিজস অনুসন্ধান এক্সপ্রেশন আপনাকে জেএসএফ উপাদান উপাদান অনুসন্ধান এক্সপ্রেশনগুলির মাধ্যমে উপাদানগুলি রেফারেন্স করার অনুমতি দেয়। জেএসএফের বেশ কয়েকটি বিল্টিন রয়েছে:
@this: বর্তমান উপাদান
@form: পিতা বা মাতা UIForm
@all: সম্পূর্ণ নথি
@none: কিছুই না
প্রাইমফিডসগুলি নতুন কীওয়ার্ড এবং সম্মিলিত এক্সপ্রেশন সমর্থন সহ এটি বাড়িয়েছে:
@parent: প্যারেন্ট উপাদান
@namingcontainer: পিতা বা মাতা UINamingContainer
@widgetVar(name): প্রদত্ত দ্বারা চিহ্নিত হিসাবে উপাদান widgetVar
আপনি এই কীওয়ার্ডগুলি মিশ্রণ প্রকাশে যেমন @form:@parent, ইত্যাদিগুলিতেও মিশ্রণ করতে পারেন @this:@parent:@parentetc.
PrimeFaces নির্বাচক (PFS) হিসেবে @(.someclass)আপনি jQuery CSS নির্বাচনকারী সিনট্যাক্স মাধ্যমে উপাদান উল্লেখ করতে পারবেন। উদাহরণস্বরূপ, এইচটিএমএল আউটপুটে সমস্ত সাধারণ স্টাইলের ক্লাস থাকা উপাদানগুলির রেফারেন্সিং। আপনার "প্রচুর" উপাদানগুলি উল্লেখ করার ক্ষেত্রে এটি বিশেষভাবে সহায়ক। এটি কেবল পূর্বনির্ধারিত যে লক্ষ্য উপাদানগুলির এইচটিএমএল আউটপুটে সমস্ত ক্লায়েন্ট আইডি রয়েছে (স্থির বা স্বয়ংক্রিয়ভাবে তৈরি হওয়া কোনও বিষয় নয়)। আরও দেখুন কিভাবে PrimeFaces নির্বাচক "@ (। MyClass)" কাজ আপডেটে = হিসেবে?