আমরা কীভাবে সাধারণভাবে ব্যবহার করতে পারি বা বাস্তব বিশ্বের উদাহরণ হিসাবে, এই স্নিপেট কী কেউ স্পষ্ট করতে পারে?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
আমরা কীভাবে সাধারণভাবে ব্যবহার করতে পারি বা বাস্তব বিশ্বের উদাহরণ হিসাবে, এই স্নিপেট কী কেউ স্পষ্ট করতে পারে?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
উত্তর:
<f:viewParam>
সেটিং রূপান্তর এবং পেতে প্যারামিটার বৈধতা পরিচালনা করে। এটি এর মতো <h:inputText>
তবে GET পরামিতিগুলির জন্য।
নিম্নলিখিত উদাহরণ
<f:metadata>
<f:viewParam name="id" value="#{bean.id}" />
</f:metadata>
মূলত নিম্নলিখিতটি করে:
id
।required
, validator
এবং converter
বৈশিষ্ট্য এবং নীড় এ <f:converter>
এবং <f:validator>
এটিতে পছন্দ হিসাবে <h:inputText>
)#{bean.id}
মান দ্বারা প্রতিনিধিত্ব করা শিমের সম্পত্তি হিসাবে সেট করুন , বা যদি value
বৈশিষ্ট্যটি অনুপস্থিত থাকে, তবে নাম হিসাবে এটি অনুরোধ বৈশিষ্ট্য হিসাবে সেট করুন id
যাতে এটি #{id}
দর্শন অনুসারে উপলব্ধ availableসুতরাং আপনি যখন পৃষ্ঠাটি খুলবেন foo.xhtml?id=10
তখন প্যারামিটারের মানটি 10
এভাবে বিনের আগে সেট করা হবে the
বৈধতা হিসাবে, নিম্নলিখিত উদাহরণটি পরমকে সেট করে required="true"
এবং 10 এবং 20 এর মধ্যে কেবল মানগুলিকেই মঞ্জুরি দেয় Any কোনও বৈধতা ব্যর্থতার ফলে কোনও বার্তা প্রদর্শিত হবে।
<f:metadata>
<f:viewParam id="id" name="id" value="#{bean.id}" required="true">
<f:validateLongRange minimum="10" maximum="20" />
</f:viewParam>
</f:metadata>
<h:message for="id" />
আপনি এটির <f:viewAction>
জন্য ব্যবহার করতে পারেন ।
<f:metadata>
<f:viewParam id="id" name="id" value="#{bean.id}" required="true">
<f:validateLongRange minimum="10" maximum="20" />
</f:viewParam>
<f:viewAction action="#{bean.onload}" />
</f:metadata>
<h:message for="id" />
সঙ্গে
public void onload() {
// ...
}
তবে <f:viewAction>
এটি জেএসএফ ২.২ ( <f:viewParam>
জেএসএফ ২.০ থেকে ইতিমধ্যে বিদ্যমান) এর পরে নতুন। আপনি যদি আপগ্রেড করতে না পারেন তবে তার <f:event>
পরিবর্তে আপনার সেরা বাজি ব্যবহার করা হচ্ছে।
<f:event type="preRenderView" listener="#{bean.onload}" />
এটি প্রতিটি অনুরোধের জন্য অনুরোধ করা হয়। অনুরোধটি কোনও পোস্টব্যাক না হলে আপনাকে স্পষ্টতই পরীক্ষা করতে হবে:
public void onload() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
আপনি যখন "রূপান্তর / বৈধকরণ ব্যর্থ" কেসগুলি এড়িয়ে যেতে চান, তখন নীচের মত করুন:
public void onload() {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
// ...
}
}
<f:event>
এইভাবে ব্যবহার করা মোটামুটি একটি কার্যকরী / হ্যাক, ঠিক এই কারণেই <f:viewAction>
জেএসএফ ২.২-এ চালু হয়েছিল।
আপনি ন্যাভিগেশন লিঙ্কগুলিতে ভিউ প্যারামিটারগুলিকে "পাস-থ্রো" করতে পারেন যা অনুরোধের পরামিতিগুলিতে includeViewParams
বৈশিষ্ট্য সেট করে true
বা যুক্ত করে byincludeViewParams=true
<h:link outcome="next" includeViewParams="true">
<!-- Or -->
<h:link outcome="next?includeViewParams=true">
যা উপরোক্ত <f:metadata>
উদাহরণটি মূলত নিম্নলিখিত লিঙ্কটি সহ উত্পন্ন করে
<a href="next.xhtml?id=10">
মূল প্যারামিটার মান সহ।
এই পদ্ধতির শুধুমাত্র প্রয়োজন যে next.xhtml
হয়েছে এছাড়াও একটি <f:viewParam>
খুব একই পরামিতি উপর, অন্যথায় এটি মাধ্যমে গৃহীত হবে না।
<f:viewParam>
এছাড়াও "সাধারণ HTML- এর" পেতে ফর্ম সঙ্গে একযোগে ব্যবহার করা যেতে পারে।
<f:metadata>
<f:viewParam id="query" name="query" value="#{bean.query}" />
<f:viewAction action="#{bean.search}" />
</f:metadata>
...
<form>
<label for="query">Query</label>
<input type="text" name="query" value="#{empty bean.query ? param.query : bean.query}" />
<input type="submit" value="Search" />
<h:message for="query" />
</form>
...
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
...
</h:dataTable>
মূলত এই @RequestScoped
শিমের সাথে:
private String query;
private List<Result> results;
public void search() {
results = service.search(query);
}
নোট করুন যে এর <h:message>
জন্য রয়েছে <f:viewParam>
, সরল এইচটিএমএল নয় <input type="text">
! এছাড়াও মনে রাখবেন ইনপুট মান প্রদর্শন #{param.query}
যখন #{bean.query}
খালি থাকে, কারণ পেশ মান অন্যথায় না আপ সব সময়ে যখন একটি বৈধতা বা রূপান্তর ত্রুটি দেখাতে হবে। দয়া করে নোট করুন যে এই নির্মাণটি জেএসএফ ইনপুট উপাদানগুলির জন্য অবৈধ (এটি ইতিমধ্যে "কভারগুলির নীচে" এটি করছে)।