আমি লক্ষ্য করেছি যে এখানে বিভিন্ন শিমের স্কোপ রয়েছে:
@RequestScoped
@ViewScoped
@FlowScoped
@SessionScoped
@ApplicationScoped
প্রত্যেকের উদ্দেশ্য কী? আমি আমার শিমের জন্য কীভাবে একটি উপযুক্ত সুযোগ পছন্দ করব?
আমি লক্ষ্য করেছি যে এখানে বিভিন্ন শিমের স্কোপ রয়েছে:
@RequestScoped
@ViewScoped
@FlowScoped
@SessionScoped
@ApplicationScoped
প্রত্যেকের উদ্দেশ্য কী? আমি আমার শিমের জন্য কীভাবে একটি উপযুক্ত সুযোগ পছন্দ করব?
উত্তর:
এটি শিমের সুযোগ (আজীবন) উপস্থাপন করে। আপনি যদি কোনও বেসল সার্ভলেট ওয়েব অ্যাপ্লিকেশনটির "কভারের আওতায়" কাজ করার সাথে পরিচিত হন তবে এটি বোঝা সহজ: সার্লেলেটগুলি কীভাবে কাজ করে? ইনস্ট্যান্টেশন, সেশনস, ভাগ করা ভেরিয়েবল এবং মাল্টিথ্রেডিং ।
@Request/View/Flow/Session/ApplicationScoped
একটি @RequestScoped
বিন একটি সিঙ্গল এইচটিটিপি অনুরোধ-প্রতিক্রিয়া চক্র হিসাবে দীর্ঘ সময় বেঁচে থাকে (নোট করুন যে একটি অ্যাজাক্স অনুরোধটি একটি একক এইচটিটিপি অনুরোধ হিসাবেও গণনা করা হয়)। একটি @ViewScoped
শিম যতদিন বেঁচে হিসাবে আপনি যা ফিরে কল কর্ম পদ্ধতি postbacks একই JSF দৃশ্য সঙ্গে আলাপচারিতার করছি null
/ void
কোন গৌণ / পুনর্নির্দেশ ছাড়া। একটি @FlowScoped
প্রজাতি ততক্ষণ বেঁচে থাকে যতক্ষণ না আপনি প্রবাহ কনফিগারেশন ফাইলে নিবন্ধিত দর্শনগুলির নির্দিষ্ট সংগ্রহের মাধ্যমে নেভিগেট করেন। একটি @SessionScoped
শিম প্রতিষ্ঠিত এইচটিটিপি অধিবেশন যতক্ষণ বেঁচে থাকে। @ApplicationScoped
ওয়েব অ্যাপ্লিকেশন চলাকালীন একটি শিম বেঁচে থাকে। লক্ষ্য করুন CDI @Model
মূলত একটি হল বাঁধাধরা জন্য @Named @RequestScoped
, তাই একই নিয়ম প্রযোজ্য।
কোন সুযোগটি বেছে নেবে তা পুরোপুরি শিমটি ধারণ করে এবং উপস্থাপন করে এমন ডেটা (রাষ্ট্র) depends @RequestScoped
সহজ এবং অ-অজ্যাক্স ফর্ম / উপস্থাপনার জন্য ব্যবহার করুন । @ViewScoped
সমৃদ্ধ এজাক্স-সক্ষম গতিশীল দর্শনগুলির জন্য ব্যবহার করুন (এজাক্স ভিত্তিক বৈধতা, উপস্থাপনা, কথোপকথন, ইত্যাদি)। ব্যবহার করুন @FlowScoped
"জাদুকর" ( "প্রশ্নাবলী") একাধিক পৃষ্ঠায় উপর ইনপুট ডেটা বিস্তার সংগ্রহের প্যাটার্ন জন্য। ব্যবহারের @SessionScoped
ক্লায়েন্ট নির্দিষ্ট ডেটার জন্য যেমন লগ-ইন ব্যবহারকারী এবং ব্যবহারকারীর পছন্দ (ভাষা, ইত্যাদি)। @ApplicationScoped
অ্যাপ্লিকেশন প্রশস্ত ডেটা / ধ্রুবকগুলির জন্য ব্যবহার করুন , যেমন ড্রপডাউন তালিকাগুলি যা সবার জন্য একই, বা কোনও বিন্যাসের পরিবর্তনশীল ছাড়াই পরিচালিত মটরশুটি এবং কেবলমাত্র পদ্ধতি রয়েছে।
@ApplicationScoped
সেশন / ভিউ / অনুরোধ স্কোপড ডেটার জন্য শিমের অপব্যবহার এটিকে সমস্ত ব্যবহারকারীর মধ্যে ভাগ করে নেওয়া হবে, সুতরাং অন্য যে কেউ একে অপরের ডেটা দেখতে পাবে যা কেবল সাধারণ ভুল। স্কোপড @SessionScoped
ডেটা দেখার / অনুরোধের জন্য শিমের আপত্তিজনক ব্যবহারের ফলে এটি সমস্ত ট্যাব / উইন্ডোগুলির মধ্যে একক ব্রাউজার সেশনে ভাগ করে নেওয়া যায়, তাই ব্যবহারকারীর অভিজ্ঞতার জন্য খারাপ এমন ট্যাবগুলির মধ্যে স্যুইচ করার পরে প্রতিটি দৃশ্যের সাথে ইন্টারঅ্যাক্ট করার সময় এন্ডুয়েসার অনিয়ন্ত্রিত হতে পারে। স্কোপড @RequestScoped
ডেটা দেখার জন্য শিমের সাথে আপত্তিজনক ব্যবহারের ফলে স্কোপযুক্ত ডেটা প্রতিটি একক (এজাক্স) পোস্টব্যাকে ডিফল্টরূপে পুনরায় পুনরায় তৈরি করা সম্ভব হবে, সম্ভবত অ-কার্যকারী ফর্মগুলির জন্য ( এছাড়াও এখানে পয়েন্ট 4 এবং 5 দেখুন )। @ViewScoped
অনুরোধ, সেশন বা অ্যাপ্লিকেশন স্কোপেড ডেটার জন্য শিমকে গালি দেওয়া এবং এটিকে আপত্তিজনক ব্যবহার করা@SessionScoped
অ্যাপ্লিকেশন স্কোপড ডেটার জন্য বিন ক্লায়েন্টকে প্রভাবিত করে না, তবে এটি অকারণে সার্ভারের মেমরিটি দখল করে এবং এটি সরল অক্ষম।
মনে রাখবেন যে কর্মক্ষেত্রের প্রভাবের ভিত্তিতে সুযোগটি বাছাই করা উচিত নয়, যদি না আপনি সত্যিই কম মেমরির পদচিহ্ন রেখে থাকেন এবং সম্পূর্ণরূপে রাষ্ট্রবিহীন হতে চান; @RequestScoped
ক্লায়েন্টের অবস্থা বজায় রাখতে আপনাকে অনুরোধ পরামিতিগুলির সাথে একচেটিয়াভাবে মটরশুটি এবং ফিডল ব্যবহার করতে হবে use এছাড়াও নোট করুন যে যখন আপনার কাছে আলাদাভাবে স্কোপযুক্ত ডেটা সহ একটি জেএসএফ পৃষ্ঠা থাকে, তখন এগুলি পৃথক ব্যাকিং শিমগুলিতে ডেটার স্কোপের সাথে মিলিয়ে দেওয়ার পক্ষে একেবারে বৈধ। মটরশুটি @ManagedProperty
জেএসএফ পরিচালিত মটরশুটি বা @Inject
সিডিআই পরিচালিত মটরশুটি ক্ষেত্রে কেবল একে অপরকে অ্যাক্সেস করতে পারে ।
@CustomScoped/NoneScoped/Dependent
এটি আপনার প্রশ্নের মধ্যে উল্লেখ করা হয়নি, তবে (উত্তরাধিকার) জেএসএফও সমর্থন করে @CustomScoped
এবং @NoneScoped
, যা বাস্তব বিশ্বে খুব কমই ব্যবহৃত হয়। @CustomScoped
একটি কাস্টম পড়ুন আবশ্যক Map<K, Bean>
কিছু বৃহত্তর সুযোগ যা উপেক্ষিত হয়েছে মধ্যে বাস্তবায়ন Map#put()
এবং / অথবা Map#get()
শিম সৃষ্টি উপর আরো বেশি সূক্ষ্ম গ্রেইনড নিয়ন্ত্রণ আছে এবং / অথবা ধ্বংস করতে এ আদেশ।
জেএসএফ @NoneScoped
এবং সিডিআই @Dependent
মূলত শিমের একক ইএল-মূল্যায়ন যতদিন বেঁচে থাকে। দু'টি ইনপুট ক্ষেত্রের সাথে শিমের সম্পত্তি এবং একটি বিড ক্রিয়াকে নির্দেশ করে একটি কমান্ড বোতাম সহ একটি লগইন ফর্মের কল্পনা করুন, এইভাবে মোট তিনটি EL এক্সপ্রেশন সহ কার্যকরভাবে তিনটি দৃষ্টান্ত তৈরি করা হবে। ব্যবহারকারীর নাম সেট সহ একটি, পাসওয়ার্ড সেট সহ একটি এবং এর উপরে ক্রিয়াটি চালিত হওয়ার জন্য। আপনি সাধারণত এই সুযোগটি কেবল মটরশুটিতে ব্যবহার করতে চান যা শিম যতক্ষণ ইনজেকশন করা হচ্ছে ততক্ষণ বেঁচে থাকা উচিত। সুতরাং যদি একটি @NoneScoped
বা @Dependent
একটিতে ইনজেকশন দেওয়া হয় @SessionScoped
, তবে এটি @SessionScoped
শিমের মতো দীর্ঘকাল বেঁচে থাকবে ।
শেষ হিসাবে, জেএসএফ ফ্ল্যাশ সুযোগকেও সমর্থন করে। এটি একটি সংক্ষিপ্ত লিভিং কুকি দ্বারা সমর্থনযুক্ত যা সেশন স্কোপে ডেটা এন্ট্রি সম্পর্কিত। পুনঃনির্দেশের আগে, একটি কুকি একটি মান সহ এইচটিটিপি প্রতিক্রিয়াতে সেট করা হবে যা সেশন স্কোপে ডেটা প্রবেশের সাথে অনন্যভাবে যুক্ত। পুনঃনির্দেশের পরে, ফ্ল্যাশ স্কোপ কুকির উপস্থিতি যাচাই করা হবে এবং কুকির সাথে সম্পর্কিত ডেটা এন্ট্রি সেশন স্কোপ থেকে সরানো হবে এবং পুনঃনির্দেশিত অনুরোধের অনুরোধের স্কোপে রাখা হবে। অবশেষে কুকি এইচটিটিপি প্রতিক্রিয়া থেকে সরানো হবে। পুনঃনির্দেশিত অনুরোধটির স্কোপড ডেটা অনুরোধের অ্যাক্সেস রয়েছে যা প্রাথমিক অনুরোধে প্রস্তুত করা হয়েছিল।
এটি আসলে পরিচালিত শিমের স্কোপ হিসাবে উপলভ্য নয়, যেমন এর মতো কোনও জিনিস নেই @FlashScoped
। ফ্ল্যাশ সুযোগ কেবল ExternalContext#getFlash()
পরিচালিত মটরশুটি এবং #{flash}
EL এর মাধ্যমে একটি মানচিত্র হিসাবে উপলভ্য ।
@FlowScoped
(এটি ম্যানুয়ালি শুরু / থামানোর দরকার নেই)।
ViewAccesscoped
এবংWindowScoped
@RequestScoped
@SessionScoped
@ApplicationScoped
@ConversationScoped
আপনার বর্ণিত স্কোপগুলি আলাদা কেন?
জেএসএফ ২.৩ থেকে প্যাকেজ javax.faces.bean
প্যাকেজে সংজ্ঞায়িত সমস্ত বিনের স্কোপগুলি সিডিআই দিয়ে স্কোপগুলি সারিবদ্ধ করার জন্য অবচিত করা হয়েছে। তবুও এগুলি কেবল তখন প্রযোজ্য যদি আপনার শিম @ManagedBean
টিকা ব্যবহার করে । আপনি যদি ২.৩ এর নীচে জেএসএফ সংস্করণ ব্যবহার করে থাকেন তবে শেষে উত্তরাধিকারের উত্তরটি দেখুন।
জেএসএফ ২.৩ থেকে এখানে এমন স্কোপ রয়েছে যা জেএসএফ ব্যাকিং শিমের জন্য ব্যবহার করা যেতে পারে:
1@javax.enterprise.context.ApplicationScoped
.: অ্যাপ্লিকেশন সুযোগ ওয়েব অ্যাপ্লিকেশন পুরো সময়কালের জন্য স্থায়ী। সেই সুযোগটি সমস্ত অনুরোধ এবং সমস্ত সেশনের মধ্যে ভাগ করা আছে। আপনার কাছে পুরো অ্যাপ্লিকেশনের জন্য ডেটা থাকলে এটি কার্যকর।
২@javax.enterprise.context.SessionScoped
: অধিবেশন সমাপ্তি অবধি অধিবেশন প্রতিষ্ঠার সময় থেকে অধিবেশন সুযোগটি স্থায়ী। একই HTTP অধিবেশনগুলিতে ঘটে যাওয়া সমস্ত অনুরোধগুলির মধ্যে সেশন প্রসঙ্গটি ভাগ করা হয়। এটি কার্যকর যখন আপনি নির্দিষ্ট সেশনের জন্য নির্দিষ্ট ক্লায়েন্টের জন্য ডেটা সংরক্ষণ করতে চাইবেন না useful
৩@javax.enterprise.context.ConversationScoped
:: কথোপকথনের ক্ষেত্রটি শিমের জীবন যেমন রয়েছে তেমন লগ হিসাবে। সুযোগটি 2 পদ্ধতি সরবরাহ করে: Conversation.begin()
এবং Conversation.end()
। শিমের জীবন শুরু বা শেষ করতে এই পদ্ধতিগুলি স্পষ্টভাবে বলা উচিত।
৪@javax.enterprise.context.RequestScoped
:: অনুরোধের সুযোগটি স্বল্পস্থায়ী। এটি যখন কোনও HTTP অনুরোধ জমা দেওয়া হয় এবং ক্লায়েন্টকে প্রতিক্রিয়া ফেরত দেওয়ার পরে শেষ হয় তখন এটি শুরু হয়। আপনি যদি একটি পরিচালিত শিমকে অনুরোধের সুযোগে রাখেন তবে প্রতিটি অনুরোধের সাথে একটি নতুন উদাহরণ তৈরি করা হবে। আপনি যদি সেশন স্কোপ স্টোরেজ ব্যয়ের বিষয়ে উদ্বিগ্ন হন তবে অনুরোধের সুযোগটি বিবেচনা করা উচিত।
৫@javax.faces.flow.FlowScoped
:: প্রবাহ বেঁচে থাকে ততক্ষণ ফ্লো স্কোপ থাকে। কোনও প্রবাহকে পৃষ্ঠাগুলির একটি সেট (বা মতামত) হিসাবে সংজ্ঞায়িত করা যেতে পারে যা কাজের একককে সংজ্ঞায়িত করে। ব্যবহারকারী যতক্ষণ না ফ্লোতে নেভিগেট করে ততক্ষণ ফ্লো স্কোপড সক্রিয় থাকে।
6.@javax.faces.view.ViewScoped
: দৃশ্য সুযোগ থেকে যায় একটি শিম যখন একই JSF পৃষ্ঠা redisplayed করা হয়। ব্যবহারকারী অন্য পৃষ্ঠায় নেভিগেট করার সাথে সাথে শিম সুযোগের বাইরে চলে যায়।
নিম্নলিখিত উত্তরাধিকারের উত্তরটি ২.৩ এর আগে জেএসএফ সংস্করণ প্রয়োগ করে
জেএসএফ 2.x হিসাবে 4 টি শিমের স্কোপ রয়েছে:
- @SessionScoped
- @RequestScoped
- @ApplicationScoped
- @ViewScoped
অধিবেশন সুযোগ: অধিবেশন সমাপ্তি অবধি অধিবেশন প্রতিষ্ঠার সময় থেকে অধিবেশন সুযোগটি স্থায়ী। যদি ওয়েব অ্যাপ্লিকেশনটি এইচটিটিপিএসশন অবজেক্টে অবৈধ পদ্ধতিটি আহ্বান করে বা সময়সাপেক্ষে আউট হয় তবে একটি সেশন সমাপ্ত হবে।
রিকোয়েস্টস্কোপ: অনুরোধের সুযোগটি স্বল্পস্থায়ী। এটি যখন কোনও HTTP অনুরোধ জমা দেওয়া হয় এবং ক্লায়েন্টকে প্রতিক্রিয়া ফেরত দেওয়ার পরে শেষ হয় তখন এটি শুরু হয়। আপনি যদি একটি পরিচালিত শিমকে অনুরোধের সুযোগে রাখেন তবে প্রতিটি অনুরোধের সাথে একটি নতুন উদাহরণ তৈরি করা হবে। আপনি যদি সেশন স্কোপ স্টোরেজ ব্যয়ের বিষয়ে উদ্বিগ্ন হন তবে অনুরোধের সুযোগটি বিবেচনা করা উচিত।
অ্যাপ্লিকেশনস্কোপ: ওয়েব অ্যাপ্লিকেশনটির পুরো সময়কালের জন্য অ্যাপ্লিকেশন সুযোগটি বহাল থাকে। সেই সুযোগটি সমস্ত অনুরোধ এবং সমস্ত সেশনের মধ্যে ভাগ করা আছে। যদি ওয়েব অ্যাপ্লিকেশনটির সমস্ত দৃষ্টান্তের মধ্যে একটি একক শিম ভাগ করে নেওয়া হয় তবে আপনি পরিচালিত মটরশুটিগুলি প্রয়োগের সুযোগে রাখুন scope শিমটি তৈরি করা হয় যখন অ্যাপ্লিকেশনটির কোনও ব্যবহারকারীর দ্বারা এটি প্রথম অনুরোধ করা হয়, এবং অ্যাপ্লিকেশন সার্ভার থেকে ওয়েব অ্যাপ্লিকেশনটি সরিয়ে না দেওয়া পর্যন্ত এটি বেঁচে থাকে।
ভিউস্কোপ: জেএসএফ 2.0 তে দেখার সুযোগ যুক্ত করা হয়েছিল। একই জেএসএফ পৃষ্ঠাটি পুনঃনির্দেশ করা অবস্থায় দেখার সুযোগে একটি বিন রয়েছে ists (জেএসএফ স্পেসিফিকেশনটি জেএসএফ পৃষ্ঠার জন্য শব্দ শব্দটি ব্যবহার করে)) ব্যবহারকারী কোনও ভিন্ন পৃষ্ঠায় নেভিগেট করার সাথে সাথে শিমের সুযোগ ছাড়িয়ে যায়।
আপনার প্রয়োজনীয়তার উপর ভিত্তি করে সুযোগটি চয়ন করুন।
উত্স: কোর জাভা সার্ভারের ডেভিড গেরি এবং কে হোরস্টম্যান দ্বারা তৃতীয় সংস্করণের মুখোমুখি [পৃষ্ঠা নং] 51 - 54]
invalidate()
অবৈধ পদ্ধতি ": পদ্ধতি বা অবৈধ পদ্ধতি দ্বারা আপনার অর্থ কী ?
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
আপনার "লগআউট বিন" তে আহবান করা তার অর্থ means