请改用 Application#evaluateExpressionGet()。
它将在尚未完成时创建bean。
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().evaluateExpressionGet(context, "#{bean}", Bean.class);
其中 是受管 Bean 名称,并且是适当的后备 Bean 类。"bean"
Bean.class
如有必要,您可以将它包装在帮助器方法中,以便不需要强制转换(JSF男孩没有利用泛型和中的参数):Class
evaluateExpressionGet
public static <T> T findBean(String managedBeanName, Class<T> beanClass) {
FacesContext context = FacesContext.getCurrentInstance();
return beanClass.cast(context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", beanClass));
}
可用作:
Bean bean = findBean("bean", Bean.class);
或者不带类型,但带有 :@SuppressWarnings
@SuppressWarnings("unchecked")
public static <T> T findBean(String managedBeanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", Object.class);
}
可用作:
Bean bean = findBean("bean");
更新:以上是JSF 1.2特有的。以下是 JSF 1.1 或更早版本使用当前已弃用的 Application#createValueBinding() 的方法
:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().createValueBinding("#{bean}").getValue(context);