Use Application#evaluateExpressionGet()
en su lugar. Creará frijol cuando aún no está hecho.
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().evaluateExpressionGet(context, "#{bean}", Bean.class);
Dónde "bean"
es el nombre bean gestionado y Bean.class
es la clase bean de respaldo apropiado.
Puede si es necesario terminar con esto en un método de ayuda para que la fundición es innecesaria (JSF los chicos qué no tomar ventaja de los genéricos y el parámetro Class
en evaluateExpressionGet
):
public static <T> T findBean(String managedBeanName, Class<T> beanClass) {
FacesContext context = FacesContext.getCurrentInstance();
return beanClass.cast(context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", beanClass));
}
que puede ser utilizado como:
Bean bean = findBean("bean", Bean.class);
o sin el tipo, pero con un @SuppressWarnings
:
@SuppressWarnings("unchecked")
public static <T> T findBean(String managedBeanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", Object.class);
}
que puede ser utilizado como:
Bean bean = findBean("bean");
actualización: lo anterior es por cierto JSF 1.2 específico. Así es el camino para JSF 1.1 o mayor, utilizando la actualidad obsoletaApplication#createValueBinding()
:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().createValueBinding("#{bean}").getValue(context);
Thx para esto, mi IDE está siendo cojo con la carga de clase en esto, pero creo que es la forma correcta de hacerlo ... estúpido Eclipse WAS y está construido en libs. – rat
¿ERA? Mi respuesta es, por cierto, el objetivo de JSF 1.2 (que ya tiene casi 4 años). FUE utilizado para enviar con JSF 1.1 heredado durante mucho tiempo hasta 6.1 en 2007. Voy a editar mi respuesta y agregar pronto el JSF 1.1. – BalusC
WAS = servidor de aplicaciones websphere De todos modos, pensé que debía ser 1.2 dado que WAS incluye 1.1 libs y no mostraba el método como válido, aunque cambié la carga de clases y ahora está funcionando bien, gracias de nuevo: D – rat