Nesse post vou trazer duas formas de acessar um ManagedBEans JSF já instanciados pelo container e chamar seus métodos. Útil principalmente para beans de escopo de sessão ou aplicação, não criando instâncias extras.
A primeira:
public static <T> T findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
}
A segunda:
public static Object pegaManagedBean(String nomeNoXML) {
FacesContext context = FacesContext.getCurrentInstance();
ELResolver resolver = context.getApplication().getELResolver();
return resolver.getValue(context.getELContext(), null, nomeNoXML);
}