Dans une Servlet, vous pouvez obtenir la portée de la requête de haricots:
Bean bean = (Bean) request.getAttribute("beanName");
la session et de l'étendue des haricots:
Bean bean = (Bean) request.getSession().getAttribute("beanName");
d'application et l'étendue des haricots:
Bean bean = (Bean) getServletContext().getAttribute("beanName");
Si vous êtes en cours d'exécution dans une injection de dépendance capable d'un cadre contenant et le haricot est géré par CDI @Named
au lieu de JSF de l' @ManagedBean
, c'est encore plus facile:
@Inject
private Bean bean;
Indépendamment de la portée, quand vous êtes réellement à l'intérieur de l' FacesContext
(c'est à dire le courant de la requête HTTP a été servi par l' FacesServlet
), puis la normale JSF2 façon est d'utiliser Application#evaluateExpressionGet()
:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().evaluateExpressionGet(context, "#{beanName}", Bean.class);
qui peut être convenienced comme suit:
@SuppressWarnings("unchecked")
public static <T> T findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
}
et peut être utilisée comme suit:
Bean bean = findBean("bean");
Toutefois, lorsque vous êtes déjà à l'intérieur d'un @ManagedBean
, puis à l'aide de @ManagedProperty
est plus propre, car il est plus déclaratif.
@ManagedProperty("#{bean}")
private Bean bean;