Bir servlet dayalı bir yan gibi ise @WebServlet
, @WebFilter
ve @WebListener
, bir "düz vanilya" JSF yakala @ManagedBean @RequestScoped
tarafından:
Bean bean = (Bean) request.getAttribute("beanName");
ve @ManagedBean @SessionScoped
tarafından:
Bean bean = (Bean) request.getSession().getAttribute("beanName");
ve @ManagedBean @ApplicationScoped
tarafı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)
.
@Named
JSF 2.3'ün kullanımdan kaldırılmasından bu yana CDI kullanabiliyorsanız , bu @ManagedBean
daha 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 @Inject
ed'e erişim @ViewScoped
her zaman atacaktır ContextNotActiveException
.
Yalnızca içerideyken @ManagedBean
şunları kullanabilirsiniz @ManagedProperty
:
@ManagedProperty("#{bean}")
private Bean bean;
Bunun bir @Named
veya @WebServlet
başka bir yapının içinde çalışmadığını unutmayın . Gerçekten @ManagedBean
sadece içeride çalışıyor .
A'nın içinde değilseniz @ManagedBean
, ancak FacesContext
kullanı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: