सर्वलेट आधारित कलाकृतियों में, जैसे @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)
।
यदि आप @Named
JSF 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");
यह सभी देखें: