<p:commandXxx process> <p:ajax process> <f:ajax execute>
processঅ্যাট্রিবিউট সার্ভার প্রান্তের এবং শুধুমাত্র প্রভাবিত করতে পারে UIComponentবাস্তবায়ন গুলি EditableValueHolder(ইনপুট ক্ষেত্র) অথবা ActionSource(কমান্ড ক্ষেত্র)। processঅ্যাট্রিবিউট বলে JSF, ক্লায়েন্ট আইডি, যা উপাদান ঠিক উপরে সমগ্র JSF জীবনচক্র মাধ্যমে প্রক্রিয়াকৃত করা আবশ্যক একটি স্থান পৃথক করা তালিকা ব্যবহার (আংশিক) ফর্ম জমা দিতে হবে।
JSF তারপর অনুরোধ মান প্রয়োগ করা হবে (HTTP অনুরোধ পরামিতি উপাদান নিজস্ব ক্লায়েন্ট ID উপর ভিত্তি করে এবং তারপর খোঁজার পারেন ক্ষেত্রে পেশ মান যেমন সেটিং EditableValueHolderউপাদান অথবা একটি নতুন কিউইং ActionEventক্ষেত্রে ActionSourceউপাদান), সঞ্চালন রূপান্তর, বৈধতা এবং আপডেট মডেল মান ( EditableValueHolderকেবলমাত্র উপাদানগুলি) এবং অবশেষে সারি লাগানো ActionEvent( ActionSourceকেবলমাত্র উপাদানগুলি) প্রার্থনা করুন । জেএসএফ processবৈশিষ্ট্য দ্বারা আচ্ছাদিত নয় এমন সমস্ত অন্যান্য উপাদানগুলির প্রক্রিয়াজাতকরণ এড়িয়ে যাবে । এছাড়াও, উপাদানগুলির প্রয়োগগুলির অনুরোধের মানগুলির পর্যায়ের সময়গুলির বিশিষ্টতা renderedযাচাই করে falseতাও টেম্পারড অনুরোধগুলির বিরুদ্ধে সুরক্ষার অংশ হিসাবে এড়ানো হবে।
নোট করুন যে এটি ActionSourceউপাদানগুলির ক্ষেত্রে (যেমন <p:commandButton>) খুব গুরুত্বপূর্ণ যে আপনি নিজেই উপাদানটির অংশটিকে অন্তর্ভুক্ত করবেন process, বিশেষত যদি আপনি উপাদানটির সাথে সম্পর্কিত ক্রিয়াটি চালিত করতে চান। সুতরাং নীচের উদাহরণটি যা নির্দিষ্ট কিছু ইনপুট উপাদান (গুলি) প্রক্রিয়া করতে চায় যখন নির্দিষ্ট কমান্ড উপাদানটি চাওয়া হয় তা কাজ করে না:
<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="foo" action="#{bean.action}" />
এটা শুধুমাত্র প্রক্রিয়া হবে #{bean.foo}এবং না#{bean.action} । আপনাকে কমান্ড উপাদানটি নিজেই অন্তর্ভুক্ত করতে হবে:
<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="@this foo" action="#{bean.action}" />
বা, যেমন আপনি স্পষ্টতই জানতে পেরেছেন @parentযে তারা যদি সাধারণ পিতা-মাতার একমাত্র উপাদান হয়ে থাকে তবে তা ব্যবহার করে :
<p:panel><!-- Type doesn't matter, as long as it's a common parent. -->
<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="@parent" action="#{bean.action}" />
</p:panel>
বা, যদি উভয়ই পিতামাতার UIFormউপাদানগুলির একমাত্র উপাদান হয়ে থাকে তবে আপনি এটি ব্যবহার করতে পারেন @form:
<h:form>
<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="@form" action="#{bean.action}" />
</h:form>
এটি কখনও কখনও অবাঞ্ছিত হয় যদি ফর্মটিতে আরও ইনপুট উপাদান থাকে যা আপনি প্রক্রিয়াকরণে এড়াতে চান তবে প্রায়শই ক্ষেত্রে যখন আপনি অন্য ইনপুট উপাদান (গুলি) বা বর্তমান ইনপুট উপাদানটির উপর ভিত্তি করে কিছু ইউআই বিভাগ আপডেট করতে চান একটি আজাক্স শ্রোতা পদ্ধতি। আপনি নামটি চান না যে অন্যান্য ইনপুট উপাদানগুলিতে বৈধতা ত্রুটিগুলি এজাক্স শ্রোতা পদ্ধতিকে কার্যকর হতে বাধা দিচ্ছে।
তারপর আছে @all। এটিতে কোনও বিশেষ প্রভাব নেইprocess অ্যাট্রিবিউটে , তবে কেবল updateঅ্যাট্রিবিউটে। একটি process="@all"ঠিক যেমন আচরণ করে process="@form"। এইচটিএমএল একসাথে একাধিক ফর্ম জমা দেওয়ার পক্ষে সমর্থন করে না।
উপায় দ্বারা এছাড়াও একটি @none যা দরকারী হতে পারে যদি আপনি একেবারে প্রক্রিয়া কিছু প্রয়োজন হবে না, কিন্তু শুধুমাত্র মাধ্যমে কিছু নির্দিষ্ট অংশের আপডেট করতে চান update, বিশেষ করে যারা বিভাগে যাদের সামগ্রী পেশ মান বা কর্ম শ্রোতাদের ওপর নির্ভর করে না।
উল্লেখ্য হওয়া উচিত যে এইচটিটিপি রিকোয়েস্ট পেলেড (অনুরোধ প্যারামিটারের পরিমাণ) এ processঅ্যাট্রিবিউটটির কোনও প্রভাব নেই । অর্থ, এইচটিএমএল প্রতিনিধির মধ্যে থাকা "সবকিছু" প্রেরণের ডিফল্ট এইচটিএমএল আচরণ <h:form>প্রভাবিত হবে না। যদি আপনার একটি বৃহত ফর্ম থাকে এবং আপনি এইচটিটিপি রিকোয়েস্ট পেইডকে কেবল প্রসেসিংয়ে একেবারে প্রয়োজনীয় এগুলি হ্রাস করতে চান, অর্থাত কেবল processএট্রিবিউট দ্বারা আচ্ছাদিত হয় , তবে আপনি partialSubmitপ্রাইমফ্রিজস অ্যাজাক্স উপাদানগুলিতে <p:commandXxx ... partialSubmit="true">বা হিসাবে হিসাবে বৈশিষ্ট্যটি সেট করতে পারেন <p:ajax ... partialSubmit="true">। আপনি সম্পাদনা করে এই 'বিশ্বব্যাপী' কনফিগার করতে পারেনweb.xml এবং যুক্ত পারেন
<context-param>
<param-name>primefaces.SUBMIT</param-name>
<param-value>partial</param-value>
</context-param>
বিকল্পভাবে, আপনি ব্যবহার করতে পারেন <o:form> ওমনিফিসগুলি 3.0+ যা এই আচরণের জন্য ডিফল্ট হয়।
PrimeFaces নির্দিষ্ট মান JSF সমতুল্য processহয় executeথেকে <f:ajax execute>। এটি ঠিক একইরকম আচরণ করে যে এটি কমা-বিচ্ছিন্ন স্ট্রিংকে সমর্থন করে না যখন প্রাইমফ্রিজস একটি করে (যদিও আমি ব্যক্তিগতভাবে কেবল স্থান-বিচ্ছিন্ন কনভেনশনকে আটকে রাখার পরামর্শ দিই), বা @parentকীওয়ার্ডটি নেই। এছাড়াও, এটি <p:commandXxx process>ডিফল্ট @formযখন হয় <p:ajax process>এবং <f:ajax execute>ডিফল্ট হয় তা জেনে রাখা কার্যকর হতে পারে @this। অবশেষে, এটি processতথাকথিত "প্রাইমফিজস সিলেক্টরস" কে সমর্থন করে তাও জেনে রাখা দরকারী , প্রাইমফ্রিজ নির্বাচকরা আপডেট = "@ (। মাই ক্লাস)" এর মতো কাজ করবেন কীভাবে?
<p:commandXxx update> <p:ajax update> <f:ajax render>
updateঅ্যাট্রিবিউট ক্লায়েন্ট সাইড এবং সব HTML টি উপস্থাপনা প্রভাবিত করতে পারে UIComponentসে। updateঅ্যাট্রিবিউট জাভাস্ক্রিপ্ট বলে (এক Ajax অনুরোধ / প্রতিক্রিয়া পরিচালনা করার জন্য দায়ী), ক্লায়েন্ট আইডি, যা এইচটিএমএল DOM গাছ প্রয়োজন অংশের ফর্মটি জমা দিতে প্রতিক্রিয়া আপডেট করা একটি স্থান পৃথক করা তালিকা ব্যবহার করে।
জেএসএফ তার জন্য সঠিক এজ্যাক্স প্রতিক্রিয়া প্রস্তুত করবে, যাতে আপডেট করার জন্য কেবল অনুরোধ করা অংশ থাকে। জেএসএফ অন্য সমস্ত উপাদানগুলি এজ্যাক করবে যা updateএজ্যাক্স প্রতিক্রিয়াতে অ্যাট্রিবিউট দ্বারা আচ্ছাদিত নয় , যার ফলে সাড়া পেডলোডটি ছোট রাখবে। এছাড়াও, উপাদানগুলির রেন্ডার প্রতিক্রিয়া পর্বের সময় যার renderedবিশিষ্টতা মূল্যায়ন করে falseতা এড়িয়ে যাবে। মনে রাখবেন যে এটি ফিরে আসার পরেও true, জাভাস্ক্রিপ্ট এটি প্রাথমিকভাবে থাকলে এইচটিএমএল ডিওএম ট্রিতে আপডেট করতে পারে না false। পরিবর্তে আপনার এটি মোড়ানো বা তার পিতামাতাকে আপডেট করতে হবে। আরও দেখুন অ্যাজাক্স আপডেট / রেন্ডার এমন কোনও উপাদানটিতে কাজ করে না যা বৈশিষ্ট্যটি সরবরাহ করে ।
সাধারণত, আপনি কেবলমাত্র সেই উপাদানগুলি আপডেট করতে চান যা ক্লায়েন্টের পক্ষে (আংশিক) ফর্ম জমা দেওয়ার জন্য সত্যই "রিফ্রেশ" হওয়া দরকার। নীচের উদাহরণটি এর মাধ্যমে সম্পূর্ণ পিতামাতার ফর্মটি আপডেট করে @form:
<h:form>
<p:inputText id="foo" value="#{bean.foo}" required="true" />
<p:message id="foo_m" for="foo" />
<p:inputText id="bar" value="#{bean.bar}" required="true" />
<p:message id="bar_m" for="bar" />
<p:commandButton action="#{bean.action}" update="@form" />
</h:form>
(নোট করুন যে processগুণটি @formইতিমধ্যে ডিফল্ট হিসাবে বাদ দেওয়া হয়েছে)
যদিও এটি সূক্ষ্মভাবে কাজ করতে পারে, ইনপুট এবং কমান্ড উপাদানগুলির আপডেট এই বিশেষ উদাহরণে অপ্রয়োজনীয়। আপনি যদি মডেল মানগুলি fooএবং barঅভ্যন্তরীণ actionপদ্ধতিটি পরিবর্তন না করেন (যা ইউএক্স দৃষ্টিভঙ্গিতে পরিবর্তিত হবে), সেগুলি আপডেট করার কোনও কারণ নেই। বার্তা উপাদান শুধুমাত্র যা সত্যিই আপডেট করা প্রয়োজন:
<h:form>
<p:inputText id="foo" value="#{bean.foo}" required="true" />
<p:message id="foo_m" for="foo" />
<p:inputText id="bar" value="#{bean.bar}" required="true" />
<p:message id="bar_m" for="bar" />
<p:commandButton action="#{bean.action}" update="foo_m bar_m" />
</h:form>
যাইহোক, যখন আপনার অনেকগুলি থাকে তখন এটি ক্লান্তিকর হয়। প্রাইমফ্রিজ সিলেক্টরদের থাকার কারণগুলির মধ্যে এটি অন্যতম। এই বার্তাগুলির উপাদানগুলির উত্পাদিত এইচটিএমএল আউটপুটে একটি সাধারণ স্টাইলের শ্রেণি রয়েছে ui-message, সুতরাং নিম্নলিখিতগুলিও নিম্নলিখিতগুলি করা উচিত:
<h:form>
<p:inputText id="foo" value="#{bean.foo}" required="true" />
<p:message id="foo_m" for="foo" />
<p:inputText id="bar" value="#{bean.bar}" required="true" />
<p:message id="bar_m" for="bar" />
<p:commandButton action="#{bean.action}" update="@(.ui-message)" />
</h:form>
(দ্রষ্টব্য যে আপনার বার্তার উপাদানগুলিতে আইডি রাখা উচিত, অন্যথায় @(...)এটি কাজ করবে না! আবার দেখুন, আপডেট হিসাবে প্রাইমফ্রিজ নির্বাচনকারীরা কীভাবে = "@ (। মাই ক্লাস)" কাজ করবেন? বিস্তারিতভাবে দেখুন)
@parentশুধুমাত্র পিতা বা মাতা উপাদান, যা এইভাবে বর্তমান উপাদান এবং সমস্ত ভাইবোন এবং তাদের সন্তানদের জুড়ে আপডেট। আপনি যদি প্রতিটি নিজস্ব দায়বদ্ধতার সাথে ফর্মটি বুদ্ধিমান গোষ্ঠীতে পৃথক করে থাকেন তবে এটি আরও কার্যকর useful @thisআপডেট, একথাও ঠিক যে, শুধুমাত্র বর্তমান অংশটি। সাধারণত, আপনি যখন ক্রিয়াকলাপে উপাদানটির নিজস্ব HTML বৈশিষ্ট্যগুলির মধ্যে একটি পরিবর্তন করতে চান কেবল তখনই এটি প্রয়োজন। যেমন
<p:commandButton action="#{bean.action}" update="@this"
oncomplete="doSomething('#{bean.value}')" />
কল্পনা করুন যে পরিবর্তিত হয় যা oncompleteদিয়ে কাজ করা প্রয়োজন , তখন উপাদানটি আপডেট না করা হলে এই নির্মাণটি কাজ করতে পারত না, সাধারণ কারণ হিসাবে উত্পন্ন এইচটিএমএল আউটপুট অংশ (এবং এইভাবে সেখানে সমস্ত এলএল এক্সপ্রেশন মূল্যায়ন করা হয়) প্রতিক্রিয়া রেন্ডার সময়)।valueactiononcomplete
@allযা যত্নের সাথে ব্যবহার করা উচিত সমগ্র দস্তাবেজ, আপডেট। সাধারণত, আপনি এর জন্য একটি সরল লিঙ্ক ( <a>বা <h:link>) অথবা একটি দ্বারা পুনঃনির্দেশ-পোস্ট-পোস্টের মাধ্যমে ?faces-redirect=trueবা এর মাধ্যমে সত্যিকারের জিইটি অনুরোধটি ব্যবহার করতে চান ExternalContext#redirect()। প্রভাবগুলিতে,process="@form" update="@all" অ-এজ্যাক্স (অ আংশিক) জমা দেওয়ার মতোই একই প্রভাব ফেলে। আমার পুরো জেএসএফ কেরিয়ারে, আমি কেবলমাত্র বুদ্ধিমান ব্যবহারের মুখোমুখি @allহ'ল এজ্যাক্স অনুরোধের সময় কোনও ব্যতিক্রম ঘটলে সম্পূর্ণরূপে একটি ত্রুটি পৃষ্ঠা প্রদর্শন করা। আরও দেখুন এজেএক্সাইফাইড উপাদানগুলির জন্য জেএসএফ ২.০ ব্যতিক্রম নিয়ে কাজ করার সঠিক উপায় কী?
PrimeFaces নির্দিষ্ট মান JSF সমতুল্য updateহয় renderথেকে <f:ajax render>। এটি ঠিক একইরকম আচরণ করে যে এটি কমা-বিচ্ছিন্ন স্ট্রিংকে সমর্থন করে না যখন প্রাইমফ্রিজস একটি করে (যদিও আমি ব্যক্তিগতভাবে কেবল স্থান-বিচ্ছিন্ন কনভেনশনকে আটকে রাখার পরামর্শ দিই) বা @parentকীওয়ার্ডটি নয়। উভয় updateএবং renderডিফল্ট@none (যা "কিছুই না")।
আরো দেখুন: