আমি কী জেএসএফ ব্যাকিং শিম পদ্ধতি থেকে একটি জেএসএফ উপাদান আপডেট করতে পারি?


102

জেএসএফ ব্যাকিং শিম পৃষ্ঠায় কোনও উপাদান আপডেট করার কারণ আছে কি? পৃষ্ঠায় কোনও উপাদান আপডেট করার জন্য আমি আপডেট অ্যাট্রিবিউট সহ একটি এজাক্স উপাদানটি ব্যবহার করতে চাই না। জেএসএফ ব্যাকিং শিম পদ্ধতির মধ্যে থেকে আমাকে একটি আপডেট ট্রিগার করতে হবে। নোট করুন পৃষ্ঠায় আপডেটটি এই পদ্ধতিটি সম্পূর্ণ হওয়ার পরে বা এর সমাপ্তির আগে হতে পারে। আমি প্রাইমফ্রিজ ব্যবহার করছি, যদি এমন কোনও সমাধান থাকে যা প্রাইমফ্রিজ ব্যবহার করে নেওয়া যেতে পারে।


বৈধতা ত্রুটি ট্রিগার করতে পারে: stackoverflow.com/a/14401741/1599699
অ্যান্ড্রু

উত্তর:


189

স্ট্যান্ডার্ড জেএসএফ এপিআই ব্যবহার করে ক্লায়েন্ট আইডি এতে যুক্ত করুন PartialViewContext#getRenderIds()

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");

প্রাইমফ্রিজ নির্দিষ্ট নির্দিষ্ট এপিআই ব্যবহার করে PrimeFaces.Ajax#update()

PrimeFaces.current().ajax().update("foo:bar");

বা আপনি যদি এখনও প্রাইমফ্রিজে 6.2+ এ না থাকেন তবে ব্যবহার করুন RequestContext#update()

RequestContext.getCurrentInstance().update("foo:bar");

যদি আপনি জেএসএফ ইউটিলিটি লাইব্রেরি ওমনিফিস ব্যবহার করেন তবে ব্যবহার করুন Ajax#update()

Ajax.update("foo:bar");

নির্বিশেষে যাই হোক না কেন, নোট করুন যে সেই ক্লায়েন্ট আইডিগুলিকে নিখুঁত ক্লায়েন্ট আইডিগুলি উপস্থাপন করা উচিত যা বিভাজক চরিত্রের সাথে উপস্থাপন করা হয় নিNamingContainer যেমন আপনি ভিউ পাশ থেকে করেন।


6
মনে হচ্ছে এটি রেন্ডার রেসপন্স ফেজ চলাকালীন আমি এটি কাজ করতে পারি না (যা দুর্ভাগ্যক্রমে আমি এই কোডটি দেওয়ার জন্য বাধ্য হই)। যদি আমি ইনভোক অ্যাপ্লিকেশন বা পূর্ববর্তী পর্যায়ে রাখি তবে জিনিসগুলি ভাল কাজ করে। রেন্ডার রেসপন্স পর্বে থাকতে কোনও কাজের ক্ষেত্র?
অনুশীলন

8
না, অনেক দেরি হয়ে গেছে। কার্য পদক্ষেপের অনুরোধ করতে বা প্রতিক্রিয়া পর্যায়ে রেন্ডার করার আগে কাজটি সরান। এর মাধ্যমে <f:ajax listener>বা<f:event type="preRenderView" listener>
বালাসসির

জেএসএফ ১.২ দিয়ে কীভাবে এটি করা যায় সে সম্পর্কে কোনও ধারণা? উত্তরটি দীর্ঘ / জটিল হলে আমি একটি নতুন প্রশ্ন জিজ্ঞাসা করতে পারি।
রিনালদোপিজেআর

@ রিনালদোপিজেআর: জেএসএফ ১.২ এর কোনও ধারণা নেই <f:ajax>। এটি জেএসএফ ২.০ থেকে প্রবর্তিত হয়েছে। আপনার জেএসএফ ১.২ উপাদান উপাদান পাঠাগার নির্দিষ্ট সুবিধা অবলম্বন করা প্রয়োজন।
বালুসসি

@ ড্যানিয়েলক: ধারণা নেই। আমি ত্রিনিদাদ করি না। আপনি যদি এখনও ত্রিনিদাদ পথটি বের করতে না পারেন তবে কেবল স্ট্যান্ডার্ড জেএসএফ এপিআই পদ্ধতির ব্যবহার করুন।
বালুসসি

9

আমি একটি জেএসএফ ব্যাকিং শিম / বর্গ থেকে কোনও উপাদান আপডেট করার চেষ্টা করেছি

ইউআই উপাদানটি পরিচালনা করার পরে আপনাকে নিম্নলিখিতগুলি করতে হবে:

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())

(সার্ভার-সাইড) কম্পোনেন্টআইডি এর পরিবর্তে ক্লায়েন্টআইডি ব্যবহার করা গুরুত্বপূর্ণ!


7

RequestContextহয় অবচিত থেকে Primefaces 6.2 । এই সংস্করণ থেকে নিম্নলিখিত ব্যবহার করুন:

if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
    PrimeFaces.current().ajax().update(componentID);
}

এবং ব্যাকবিন থেকে জাভাস্ক্রিপ্ট কার্যকর করতে এইভাবে ব্যবহার করুন:

PrimeFaces.current().executeScript(jsCommand);

তথ্যসূত্র:


1

গবেষণার জন্য পর্যাপ্ত সময় থাকলেই সমস্ত কিছু সম্ভব :)

আমি যা করতে পেরেছি তা হল এমন লোক থাকার মতো যা আমি ইউআইতে পুনরাবৃত্তি করি: নামগুলি এবং ইনপুটগুলিতে অন্যান্য ক্ষেত্রগুলি পুনরাবৃত্তি করুন এবং প্রদর্শন করুন। তবে ক্ষেত্রগুলির মধ্যে একটি ছিল সিঙ্গেল সিলেক্ট - এ এবং তার উপর নির্ভর করে আরও একটি ইনপুট মূল্য আপডেট করে - বি এমনকি ইউআই: পুনরাবৃত্তি করা আইডি আমি রাখি না এবং এটি ডোম ট্রিতে উপস্থিত হয়েছিল

<ui:repeat id="peopleRepeat"
value="#{myBean.people}"
var="person" varStatus="status">

এইচটিএমএল-এর আইডির চেয়েও কিছু ছিল:

myForm:peopleRepeat:0:personType
myForm:peopleRepeat:1:personType

দেখার চেয়ে আমি এর মতো একটি পদ্ধতি পেয়েছি:

<p:ajax event="change"
listener="#{myBean.onPersonTypeChange(person, status.index)}"/>

এবং এর প্রয়োগটি শিমের মতো ছিল:

String componentId = "myForm:peopleRepeat" + idx + "personType";
PrimeFaces.current().ajax().update(componentId);

সুতরাং আমি কোনও ইস্যু ছাড়াই বিন থেকে উপাদানটি আপডেট করেছি। পিএফ সংস্করণ 6.2

শুভকামনা এবং শুভ কোডিং :)


আপনার যদি অ্যাজাক্স পরিবর্তন ইভেন্ট থাকে personTypeতবে এজ্যাক শ্রোতার কাছে ব্যক্তি এবং সূচি উভয়কেই পাস করা অতিমাত্রায়। আপনি ইভেন্ট থেকে আইডি এবং মান উভয় পেতে পারেন। তবে আপনার সমাধানটি আপনার নির্দিষ্ট ইউজকেসের জন্য প্রয়োজনীয় সমাধান হতে পারে, তবে যেহেতু পূর্ণ উদাহরণ নেই ( ন্যূনতম প্রজননযোগ্য উদাহরণ স্বাদে) এটি বলা শক্ত।
কুকলতজে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.