Bir servlet dayalı bir yan gibi ise @WebServlet, @WebFilterve @WebListener, bir "düz vanilya" JSF yakala @ManagedBean @RequestScopedtarafından:
Bean bean = (Bean) request.getAttribute("beanName");
ve @ManagedBean @SessionScopedtarafından:
Bean bean = (Bean) request.getSession().getAttribute("beanName");
ve @ManagedBean @ApplicationScopedtarafından:
Bean bean = (Bean) getServletContext().getAttribute("beanName");
Bu, çekirdeğin önceden JSF tarafından otomatik olarak oluşturulmasını gerektirdiğini unutmayın. Aksi takdirde bunlar geri dönecek null. Daha sonra fasulyeyi manuel olarak oluşturmanız ve kullanmanız gerekir setAttribute("beanName", bean).
@NamedJSF 2.3'ün kullanımdan kaldırılmasından bu yana CDI kullanabiliyorsanız , bu @ManagedBeandaha da kolaydır, özellikle artık fasulyeleri manuel olarak oluşturmanız gerekmediğinden:
@Inject
private Bean bean;
@Named @ViewScopedÇekirdek yalnızca JSF görünüm durumuyla tanımlanabildiğinden ve bu yalnızca FacesServletçağrıldığında kullanılabilir olduğundan, bunu kullanırken bunun işe yaramayacağını unutmayın . Bundan önce çalışan bir filtrede, bir @Injected'e erişim @ViewScopedher zaman atacaktır ContextNotActiveException.
Yalnızca içerideyken @ManagedBeanşunları kullanabilirsiniz @ManagedProperty:
@ManagedProperty("#{bean}")
private Bean bean;
Bunun bir @Namedveya @WebServletbaşka bir yapının içinde çalışmadığını unutmayın . Gerçekten @ManagedBeansadece içeride çalışıyor .
A'nın içinde değilseniz @ManagedBean, ancak FacesContextkullanıma hazırsa (yani FacesContext#getCurrentInstance()geri dönmüyorsa null), şunları da kullanabilirsiniz Application#evaluateExpressionGet():
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = context.getApplication().evaluateExpressionGet(context, "#{beanName}", Bean.class);
aşağıdaki gibi uygun hale getirilebilir:
@SuppressWarnings("unchecked")
public static <T> T findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
}
ve aşağıdaki şekilde kullanılabilir:
Bean bean = findBean("bean");
Ayrıca bakınız: