<F: মেটাডেটা>, <f: ভিউপ্যারাম> এবং <এফ: ভিউঅ্যাকশন> কিসের জন্য ব্যবহার করা যেতে পারে?


149

আমরা কীভাবে সাধারণভাবে ব্যবহার করতে পারি বা বাস্তব বিশ্বের উদাহরণ হিসাবে, এই স্নিপেট কী কেউ স্পষ্ট করতে পারে?

<f:metadata>
    <f:viewParam id="id" value="#{bean.id}" />
    <f:viewAction action="#{bean.init}" />
</f:metadata>

উত্তর:


288

GET পরামিতিগুলি প্রক্রিয়া করুন

<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}খালি থাকে, কারণ পেশ মান অন্যথায় না আপ সব সময়ে যখন একটি বৈধতা বা রূপান্তর ত্রুটি দেখাতে হবে। দয়া করে নোট করুন যে এই নির্মাণটি জেএসএফ ইনপুট উপাদানগুলির জন্য অবৈধ (এটি ইতিমধ্যে "কভারগুলির নীচে" এটি করছে)।


আরো দেখুন:


@ বালুসসি মুখের পুনঃনির্দেশ = সত্যের সাথে একত্রে ব্যবহৃত হলে "বিন" এর সুযোগটি কী হওয়া উচিত? সুযোগটি "@RequestScoped" তে সেট করা থাকলে কি এটি প্রত্যাশার মতো কাজ করবে?
গীক

@ গীক: একটি পুনর্নির্দেশ একটি নতুন জিইটি অনুরোধ তৈরি করে। উত্স এবং লক্ষ্য বিনের শিমের সুযোগটি অপ্রাসঙ্গিক। তবে আপনার একটি অনুরোধের জন্য অ্যাকাউন্টে একটি নতুন জিইটি অনুরোধের সম্ভাব্য প্রভাবগুলি গ্রহণ করা উচিত এবং স্কোপড শিমটি দেখুন। আরও দেখুন stackoverflow.com/questions/7031885/...
BalusC

@ বালুসসি "আপনি কীভাবে একটি নতুন জিইটি অনুরোধের সম্ভাব্য নিদর্শনগুলি একটি অনুরোধের জন্য অ্যাকাউন্টে নেওয়া উচিত এবং স্কোপড শিমটি দেখতে চান" এর অর্থ কী। "
গীক

@ গীক: এগুলি ট্র্যাশ করে পুনরায় তৈরি করা হবে কারণ তাদের স্কোপটি তখন শেষ হয়ে শুরু হবে।
বালুসসি

@BalusC। একটি বিস্তৃত উত্তর। "যখন আপনার কোনও '@' পোস্টকন্সট্রাক্ট মতো বৈশিষ্ট্যটি স্কোপড মটরশুটি দেখার জন্য ব্যবহার করতে হবে যা প্রতিটি অনুরোধের জন্য আবেদন করা হয় না, অনুরোধটি কোনও পোস্টব্যাক নয় কিনা তা পরীক্ষা করুন"। যদি এটি প্রতিটি অনুরোধের অনুরোধ না করে থাকে তবে কেন অনুরোধটি একটি পোস্টব্যাক কিনা তা যাচাই করবেন?
উলুক বাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.