এজ্যাক্স আপডেট / রেন্ডার করার জন্য উপাদানটির ক্লায়েন্ট আইডি কীভাবে সন্ধান করবেন? "বার" থেকে রেফারেন্স "foo" এর সাথে উপাদান খুঁজে পাওয়া যায় না


140

নিম্নলিখিত কোড PrimeFaces DataGrid + + DataTable টিউটোরিয়াল থেকে অনুপ্রাণিত এবং পুরা হয় <p:tab>একটি এর <p:tabView>একটি বসবাসকারী <p:layoutUnit>একটি এর <p:layout>। এখানে কোডের অভ্যন্তরীণ অংশটি রয়েছে ( p:tabউপাদান থেকে শুরু করে ); বাইরের অংশটি তুচ্ছ।

<p:tabView id="tabs">
    <p:tab id="search" title="Search">                        
        <h:form id="insTable">
            <p:dataTable id="table" var="lndInstrument" value="#{instrumentBean.instruments}">
                <p:column>
                    <p:commandLink id="select" update="insTable:display" oncomplete="dlg.show()">
                        <f:setPropertyActionListener value="#{lndInstrument}" 
                                        target="#{instrumentBean.selectedInstrument}" />
                        <h:outputText value="#{lndInstrument.name}" />
                    </p:commandLink>                                    
                </p:column>
            </p:dataTable>
            <p:dialog id="dlg" modal="true" widgetVar="dlg">
                <h:panelGrid id="display">
                    <h:outputText value="Name:" />
                    <h:outputText value="#{instrumentBean.selectedInstrument.name}" />
                </h:panelGrid>
            </p:dialog>                            
        </h:form>
    </p:tab>
</p:tabView>

আমি যখন ক্লিক করি তখন <p:commandLink>কোডটি কাজ করা বন্ধ করে বার্তা দেয়:

"ইনসটেবল: ডিসপ্লে" "ট্যাবগুলি থেকে অন্তর্ভুক্ত: প্রদর্শনযোগ্য" নির্বাচন করুন: নির্বাচন করুন "এক্সপ্রেশন সহ উপাদানটি খুঁজে পাচ্ছেন না।

আমি যখন <f:ajax>এটি ব্যবহার করে একই চেষ্টা করি , এটি মূলত একই কথাটি বলার সাথে একটি পৃথক বার্তা ব্যর্থ হয়:

<f:ajax> "ইনসটেবল: ডিসপ্লে" অজানা আইডি ধারণ করে এটি উপাদানগুলির প্রসঙ্গে সনাক্ত করতে পারে না "ট্যাবগুলি: ইনসটেবল: নির্বাচন করুন"

এটি কীভাবে হয় এবং আমি কীভাবে এটি সমাধান করতে পারি?

উত্তর:


313

প্রকৃত ক্লায়েন্ট আইডির জন্য এইচটিএমএল আউটপুট দেখুন

সঠিক ক্লায়েন্ট আইডি খুঁজে পেতে আপনার উত্পন্ন 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)" কাজ আপডেটে = হিসেবে?


@ জ্যাক: সবেমাত্র জাভাদোক পড়ুন: ডকস.অরাকল. com/ জাভা / // api/ javax/ faces/ comp घटक/ জেএসএফ ২.০ থেকে এটি ধ্রুবকের পরিবর্তে কনফিগারযোগ্য হয়ে উঠেছে।
বালাসসি

SEPARATOR_CHAR হ্রাস করা হয় না ? আপনি কীভাবে নেস্টেড উপাদানটিকে কল করতে পারেন তার উদাহরণ দিতে পারেন: উদাহরণস্বরূপ: context.getViewRoot().findComponent(":inputform" + UINamingContainer.getSeparatorChar(context) + "inputtext" );দয়া করে এক্সএইচটিএমএল কোডটি অন্তর্ভুক্ত করুন।
জ্যাকট্রেডস

1
ধন্যবাদ, prependId="false"আমার দিনটি সংরক্ষণের সাথে ফর্মের ভিতরে অজ্যাক্স রেন্ডারকে ব্যর্থ করার বিষয়ে নোট করুন ।
গাইম

আপনার ব্যাখ্যায় বর্ণিত ক্লায়েন্ট আইডির সঠিক অর্থ কী ? এটি কি জেএসএফের মতো -> "এই উপাদানটির ক্লায়েন্ট-পার্শ্ব শনাক্তকারী"। শুভেচ্ছা + আপনার কাজের জন্য ধন্যবাদ।
স্টিভ ওহ

1
@ অ্যান্টনু 17: উত্তরে বলা হয়েছে, এটি কেবল মোজারার ফ: এজ্যাক্সে সমর্থিত।
বালুস সি

9

প্রথমত: আমি যতদূর জানি একটি ট্যাবভিউয়ের অভ্যন্তরে ডায়লগ স্থাপন করা একটি খারাপ অভ্যাস ... আপনি আরও ভাল করে এটি গ্রহণ করবেন ...

এবং এখন আপনার প্রশ্ন:

দুঃখিত, আপনি ঠিক কী প্রয়োগ করতে চেয়েছিলেন তা পেতে আমাকে কিছুটা সময় নিয়েছিল,

আমার ওয়েব অ্যাপে নিজেই এখনই করেছি, এবং এটি কার্যকর হয়

যেমনটি আমি আগেই বলেছি পি: ডায়ালগটি পাশের `পি: ট্যাবভিউ,

আপনার প্রাথমিক পরামর্শ অনুসারে পি: ডায়ালগটি ছেড়ে দিন:

<p:dialog modal="true" widgetVar="dlg">
    <h:panelGrid id="display">
        <h:outputText value="Name:" />
        <h:outputText value="#{instrumentBean.selectedInstrument.name}" />
    </h:panelGrid>
</p:dialog>   

এবং পি: কমান্ডলিঙ্কটি দেখতে এমন হওয়া উচিত (আমি যা করলাম তা আপডেটের বৈশিষ্ট্যটি পরিবর্তন করতে হবে)

<p:commandLink update="display" oncomplete="dlg.show()">
    <f:setPropertyActionListener value="#{lndInstrument}" 
        target="#{instrumentBean.selectedInstrument}" />
    <h:outputText value="#{lndInstrument.name}" />
</p:commandLink>  

একইভাবে আমার ওয়েব অ্যাপ্লিকেশনটিতে কাজ করে এবং যদি এটি আপনার পক্ষে কাজ করে না, তবে আমি অনুমান করি যে আপনার জাভা বিনের কোডটিতে কিছু ভুল আছে ...


আমি আমার উত্তরে আমি যে সমস্ত পরিবর্তন লিখেছিলাম তা পরিবর্তনের জন্য আপনাকে পরামর্শ দিচ্ছি (বাঁধাই এবং মুখের কনফিগারেশন এবং অন্যান্য ...) সহ এটি আপনার "INFO: সংশ্লেষ সন্ধান করতে পারে না ..." সমাধান করার জন্য মনে করি
ড্যানিয়েল

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

5

এটি কারণ ট্যাব নামকরণের ধারক পাশাপাশি ... আপনার আপডেটটি হওয়া উচিত update="Search:insTable:display"যা আপনি পাশাপাশি করতে পারেন তা আপনার ডায়ালগটি কেবল ফর্মের বাইরে রাখে এবং এখনও ট্যাবটির অভ্যন্তরে থাকে তবে তা হবে:update="Search:display"


0

পরিবর্তন update="insTable:display"করার চেষ্টা করুন update="display"। আমি বিশ্বাস করি আপনি ফর্ম আইডির মতো আইডি উপসর্গ করতে পারবেন না।


2
খুব পুরানো তবে বিভ্রান্তিমূলক উত্তর। উপরে বালাসসির পোস্টটি দেখুন, পরিষ্কারভাবে এনকোলেঞ্জিং ফর্মের আইডি সহ কোনও উপাদানটির আইডির উপসর্গ দেখানো হচ্ছে: <h: form id = "form"> <p: কমান্ডলিঙ্ক আপডেট = ": অন্যরকম: ফলাফল"> <! - ঠিক আছে! -> </ h: ফর্ম> <এইচ: ফর্ম আইডি = "অন্যান্য রূপ"> <এইচ: প্যানেলগ্রুপ আইডি = "ফলাফল" /> </ এইচ: ফর্ম>
জে স্লিক

0

আমি জানি এটি ইতিমধ্যে বালাসসির একটি দুর্দান্ত উত্তর পেয়েছে তবে এখানে আমাকে সঠিক ক্লায়েন্টআইডি বলার জন্য ধারকটি পেতে আমি একটি কৌশলটি ব্যবহার করি

  1. কাজ করছে না এমন উপাদানগুলির আপডেট আপডেট করুন
  2. আপনি যে উপাদানটি আপডেট করার চেষ্টা করছেন তার মধ্যে একটি বোগাস আপডেট সহ একটি অস্থায়ী উপাদান রাখুন
  3. পৃষ্ঠাটি হিট করুন, সার্লেলেট ব্যতিক্রম ত্রুটি আপনাকে উল্লেখ করতে হবে সঠিক ক্লায়েন্ট আইডি।
  4. বোগাস উপাদানটি সরান এবং আসল আপডেটে সঠিক ক্লায়েন্টআইডি রাখুন

এখানে কোড উদাহরণ হিসাবে আমার শব্দগুলি এটি সর্বোত্তমভাবে বর্ণনা করতে পারে না।

<p:tabView id="tabs">
    <p:tab id="search" title="Search">                        
        <h:form id="insTable">
            <p:dataTable id="table" var="lndInstrument" value="#{instrumentBean.instruments}">
                <p:column>
                    <p:commandLink id="select"

এই উপাদানটির মধ্যে ব্যর্থ আপডেট সরিয়ে ফেলুন

 oncomplete="dlg.show()">
                        <f:setPropertyActionListener value="#{lndInstrument}" 
                                        target="#{instrumentBean.selectedInstrument}" />
                        <h:outputText value="#{lndInstrument.name}" />
                    </p:commandLink>                                    
                </p:column>
            </p:dataTable>
            <p:dialog id="dlg" modal="true" widgetVar="dlg">
                <h:panelGrid id="display">

আপনি যে আইডিটি আপডেট করতে চেষ্টা করছেন সেই আইডিটির উপাদানটির মধ্যে একটি উপাদান যুক্ত করুন যা ব্যর্থ হবে

   <p:commandButton id="BogusButton" update="BogusUpdate"></p:commandButton>

                    <h:outputText value="Name:" />
                    <h:outputText value="#{instrumentBean.selectedInstrument.name}" />
                </h:panelGrid>
            </p:dialog>                            
        </h:form>
    </p:tab>
</p:tabView>

এই পৃষ্ঠাটি হিট করুন এবং ত্রুটিটি দেখুন। ত্রুটিটি হ'ল : javax.servlet.SerletException: ট্যাবগুলি থেকে রেফারেন্স "বোগাসআপডেট" প্রকাশের জন্য উপাদান খুঁজে পাওয়া যায় না : ইনসটেবল: বোগাসবাটন

সুতরাং সঠিক ক্লায়েন্টআইড ব্যবহার করার পরে লক্ষ্য কন্টেইনারটির সাহসী প্লাস আইডি হবে (এই ক্ষেত্রে প্রদর্শিত হবে)

tabs:insTable:display
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.