Используйте _ 1_. Он создаст bean-компонент, когда это еще не сделано.
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().evaluateExpressionGet(context, "#{bean}", Bean.class);
Где "bean"
- имя управляемого bean-компонента, а Bean.class
- соответствующий вспомогательный класс bean-компонента.
При необходимости вы можете обернуть это вспомогательным методом, чтобы не было необходимости в приведении типов (ребята из 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 или более ранней версии с использованием устаревшего _ 12_:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().createValueBinding("#{bean}").getValue(context);
person
BalusC
schedule
12.01.2010