सर्वलेट आधारित कलाकृतियों में, जैसे @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");
ध्यान दें कि यह पूर्वापेक्षा करता है कि सेम पहले से ही JSF द्वारा पहले से ही निरुपित है। इनसे वापसी होगी null। फिर आपको मैन्युअल रूप से बीन बनाने और उपयोग करने की आवश्यकता होगी setAttribute("beanName", bean)।
यदि आप @NamedJSF 2.3 के बाद से CDI का उपयोग करने में सक्षम हैं @ManagedBean, तो यह और भी आसान है, विशेष रूप से क्योंकि आपको अब सेम को मैन्युअल रूप से बनाने की आवश्यकता नहीं है:
@Inject
private Bean bean;
ध्यान दें कि जब आप उपयोग कर रहे हैं तो यह काम नहीं करेगा @Named @ViewScopedक्योंकि बीन को केवल JSF व्यू स्टेट द्वारा पहचाना जा सकता है और यह केवल तब ही उपलब्ध होता है जब 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");
यह सभी देखें: