সার্ভলেট ভিত্তিক নিদর্শনগুলিতে যেমন @WebServlet
, @WebFilter
এবং @WebListener
, আপনি একটি "প্লেইন ভ্যানিলা" জেএসএফ @ManagedBean @RequestScoped
দ্বারা ধরে নিতে পারেন:
Bean bean = (Bean) request.getAttribute("beanName");
এবং @ManagedBean @SessionScoped
দ্বারা:
Bean bean = (Bean) request.getSession().getAttribute("beanName");
এবং @ManagedBean @ApplicationScoped
দ্বারা:
Bean bean = (Bean) getServletContext().getAttribute("beanName");
নোট করুন যে এটি পূর্বশর্ত যে শিমটি ইতিমধ্যে জেএসএফ দ্বারা স্বতঃআরিত হয়েছে। অন্যথায় এগুলি ফিরে আসবে null
। এরপরে আপনাকে ম্যানুয়ালি মটরশুটি তৈরি করতে হবে এবং ব্যবহার করতে হবে setAttribute("beanName", bean)
।
আপনি যদি @Named
জেএসএফ ২.৩ এর পরিবর্তে সিডিআই ব্যবহার করতে সক্ষম হন @ManagedBean
তবে এটি আরও বেশি সহজ, বিশেষত কারণ আপনার আর ম্যানুয়ালি মটরশুটি তৈরি করার দরকার নেই:
@Inject
private Bean bean;
মনে রাখবেন যে আপনি যখন ব্যবহার করছেন তখন এটি কাজ করবে না @Named @ViewScoped
কারণ শিমটি কেবলমাত্র জেএসএফ দর্শন রাষ্ট্রের দ্বারা চিহ্নিত করা যেতে পারে এবং এটি কেবল তখনই উপলভ্য হবে যখন FacesServlet
ডাকা হবে। এর আগে যে ফিল্টারটি চলে তার আগে কোনও @Inject
এড অ্যাক্সেস করা @ViewScoped
সর্বদা নিক্ষেপ করবে ContextNotActiveException
।
কেবলমাত্র আপনি যখন ভিতরে থাকবেন তখনই আপনি @ManagedBean
ব্যবহার করতে পারেন @ManagedProperty
:
@ManagedProperty("#{bean}")
private Bean bean;
মনে রাখবেন যে এটি এক @Named
বা @WebServlet
অন্য কোনও শৈল্পিকের অভ্যন্তরে কাজ করে না । এটি সত্যই @ManagedBean
কেবল ভিতরে কাজ করে ।
আপনি যদি ক এর অভ্যন্তরে না থাকেন @ManagedBean
তবে এটি FacesContext
সহজেই উপলভ্য হয় (যেমন FacesContext#getCurrentInstance()
ফিরে আসে না null
), আপনি এটি ব্যবহার করতে পারেন Application#evaluateExpressionGet()
:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = context.getApplication().evaluateExpressionGet(context, "#{beanName}", Bean.class);
যা নিম্নলিখিত হিসাবে সুবিধাজনক হতে পারে:
@SuppressWarnings("unchecked")
public static <T> T findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
}
এবং নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:
Bean bean = findBean("bean");
আরো দেখুন: