কখন চ ব্যবহার করতে হবে: ভিউএকশন / প্রাকরেন্ডারভিউ বনাম পোস্টকন্সট্রাক্ট?


97

টীকাগুলি ব্যবহার করে বনাম কোনও পৃষ্ঠার ডেটা শুরু করার জন্য কখন f:viewActionবা preRenderViewইভেন্টটি ব্যবহার করা উচিত @PostConstruct? যুক্তিপূর্ণ ব্যাকিং শিম যেমন সুযোগ ধরনের উপর ভিত্তি করে এক বা অন্যান্য ব্যবহার করতে পারেন ব্যাকিং শিম হয় @RequestScoped, তারপর ব্যবহার পছন্দমত হবে f:viewActionবা preRenderViewওভার @PostConstructদৃশ্য রেন্ডারিং করার পূর্বে আপনার ব্যাকিং শিম আরম্ভ করতে অপ্রাসঙ্গিক হতে দুটি would একই প্রভাব ফলাফল?

f: viewAction বা preRenderView

<f:metadata>
  <f:viewAction action="#{myBean.initialize}" />
</f:metadata>
<f:metadata>
  <f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>

বা

পছন্দ করুন

public class MyBean
{
    @PostConstruct
    public void initialize()
    {

    }
}

উত্তর:


121

@PostConstruct টীকাটি ব্যবহার করে কোনও পৃষ্ঠা শ্লোকগুলির জন্য ডেটা শুরু করার জন্য যখন কারও f: viewAction বা preRenderView ইভেন্টটি ব্যবহার করা উচিত?

<f:viewAction>এইচটিএমএল রেন্ডার হওয়ার আগে আপনি যখন কোনও পদ্ধতি চালাতে চান তখন ব্যবহার করুন । এটি বিশেষভাবে কার্যকর যদি আপনি <f:viewParam>আপডেট মডেল মান পর্যায়ের সময় দ্বারা সেট করা মডেল মানগুলির উপর ভিত্তি করে ক্রিয়া সম্পাদন করতে চান । যথা, @PostConstructরান করার মুহুর্তে এগুলি পাওয়া যায় না । জেএসএফ ২.০ / ২.১ এ, এই ট্যাগটি বিদ্যমান ছিল না এবং আপনাকে preRenderViewকার্যবিধি ব্যবহার করতে হবে ।

যদি ব্যাকিং শিমটি @RequestScoped হয় তবে তারা কার্যকরভাবে ঠিক একই জিনিসটি করে? (এবং তারপরে এটি বিকাশকারী নির্বাচনের উপর নির্ভর করে? (@ পোস্টকনস্ট্রাক্ট মনে হয় "ক্লিনার"))।

না, তারা অবশ্যই কার্যকরভাবে একই জিনিসটি করে না। @PostConstructকর্ম সঞ্চালনের জন্য intented হয় সরাসরি শিম নির্মাণের সব ইনজেকশনের নির্ভরতা সেটিং এবং যেমন পরিচালিত বৈশিষ্ট্য পর @EJB, @Inject, @ManagedProperty, ইত্যাদি যেমন, ইনজেকশনের নির্ভরতা না শিম এর কন্সট্রাকটর ভিতরে পাওয়া যায়। শিমের ভিউ, সেশন বা অ্যাপ্লিকেশন বাদ দেওয়া হলে এটি প্রতি ভিউ, সেশন বা অ্যাপ্লিকেশন অনুযায়ী একবারই চলবে। <f:viewAction>ডিফল্ট কেবলমাত্র প্রারম্ভিক তাহলে GET অনুরোধ প্রার্থনা দ্বারা, কিন্তু মাধ্যমে করতে onPostback="true"অ্যাট্রিবিউট পাশাপাশি postback অনুরোধ প্রার্থনা করার জন্য কনফিগার করা। দ্যpreRenderViewঘটনা যে HTTP- র অনুরোধে প্রার্থনা (হ্যাঁ, এটি Ajax অনুরোধ অন্তর্ভুক্ত!)।

সংক্ষিপ্ত, ব্যবহার @PostConstructযদি আপনি ইনজেকশনের নির্ভরতা এবং পরিচালিত বৈশিষ্ট্য যা দ্বারা সেট করা হয় কর্ম সঞ্চালন করতে চান @EJB, @Inject, @ManagedPropertyশিম এর নির্মানের সময়, ইত্যাদি। ব্যবহার করুন <f:viewAction>যদি আপনি এছাড়াও দ্বারা সেট বৈশিষ্ট্য উপর কর্ম সঞ্চালন করতে চান <f:viewParam>। আপনি এখনও জেএসএফ ২.০ / ২.১ এ থাকলে preRenderViewপরিবর্তে ব্যবহার করুন <f:viewAction>। আপনি প্রয়োজনে কেবল প্রাথমিক অনুরোধে ক্রিয়া FacesContext#isPostback()সম্পাদন করতে একটি চেক যোগ করতে পারেন preRenderView

আরো দেখুন:


ধন্যবাদ দুঃখিত, আপনি প্রতিক্রিয়াটি লেখার সময় আমি আমার আসল প্রশ্নটি সম্পাদনা করেছি ...
বেস্টপ্র্যাকটিসস

আমি শিমের স্কোপটি উল্লেখ করেছি কারণ @ পোষ্টকন্সট্রাক্ট কেবল তখনই ডাকা হত যখন শিমটি সেশনস্কোপেড ছিল (সেই সময়ে শিমটি প্রথম তৈরি করা হয়েছিল) তবে পৃষ্ঠাটি অ্যাক্সেস করার সাথে সাথে প্রতিবারই PreRenderView বলা হবে। নাকি আমি ভুল পেয়েছি?
বেস্টপ্র্যাকটিসস

হ্যাঁ, এটা সঠিক। প্রাক রেন্ডার ভিউ ইভেন্টটি আহ্বান করা অ্যাকশন পর্যায়ে ডাকা হয়। পোস্টের নির্মাণটি শিমের নির্মাণের পরে ডাকা হয়। প্রতিটি এইচটিটিপি অনুরোধে একটি সেশন স্কোপড শিম নির্মিত হয় না।
বালুসসি

আমি ভাবছিলাম আজাক অনুরোধের সময় আমার পদ্ধতিটি ডাকা হচ্ছে। ThePostBack () কলটি দিনটি বাঁচিয়েছে !!
জ্যাকোস্টা

সম্পূর্ণতার স্বার্থে জন্য, আমরা উল্লেখ করা উচিত Omnifaces '@Param HTTP এর জন্য "অনুরোধ পরামিতি এটি মূলত মত: <f:viewParam>কিন্তু প্রধান পার্থক্য সঙ্গে ইনজেকশনের প্যারামিটার সময় সরাসরি পাওয়া যায় যে @PostConstruct, একটি প্রয়োজন ছাড়াই প্রক্রিয়াকরণের একটি অনেক সহজ উপায় যার ফলে <f:event type="preRenderView">বা <f:viewAction>এ দেখুন "
জেনস পাইগসা

1

আপনার কি পরিচালিত শিমের বৈশিষ্ট্যগুলি শুরু করতে হবে? -> তারপরে @ পোস্টকনস্ট্রাক্ট ব্যবহার করুন অন্যথায়, আপনার কি অন্য দৃষ্টিভঙ্গি থেকে পাস করা প্যারামগুলি নিয়ে কাজ করা দরকার? -> তারপরে, " প্রাকরেন্ডারভিউ " ব্যবহার করুন

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