Utilizzare invece Application#evaluateExpressionGet()
. Creerà il bean quando non è ancora finito.
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().evaluateExpressionGet(context, "#{bean}", Bean.class);
Dove "bean"
è il nome bean gestito e Bean.class
è la classe supporto bean appropriato.
È possibile, se necessario, avvolgere questo in un metodo di supporto in modo che casting è inutile (i ragazzi JSF fatto non prendere vantaggio dei farmaci generici e il parametro Class
in evaluateExpressionGet
):
public static <T> T findBean(String managedBeanName, Class<T> beanClass) {
FacesContext context = FacesContext.getCurrentInstance();
return beanClass.cast(context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", beanClass));
}
che può essere utilizzato come:
Bean bean = findBean("bean", Bean.class);
O senza il tipo, ma con una @SuppressWarnings
:
@SuppressWarnings("unchecked")
public static <T> T findBean(String managedBeanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", Object.class);
}
che può essere usato come:
Bean bean = findBean("bean");
Aggiornamento: quanto sopra è dal modo JSF 1.2 specifico. Ecco la strada per JSF 1.1 o più anziani, con il momento deprecatoApplication#createValueBinding()
:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().createValueBinding("#{bean}").getValue(context);
Thx per questo, il mio IDE è zoppo con il caricamento della classe su questo, ma credo che sia il modo giusto di farlo ... stupido è stato eclissi e le sue librerie incorporate. – rat
ERA? La mia risposta è indirizzata a JSF 1.2 (che ha già quasi 4 anni ora). È stato utilizzato per la spedizione con JSF 1.1 legacy per un tempo molto lungo, fino al 6.1 circa 2007. Modificherò la mia risposta e aggiungerò presto la JSF 1.1. – BalusC
WAS = server di applicazioni webspace In ogni caso ho calcolato che deve essere 1.2 poiché WAS include 1.1 librerie e non mostrava il metodo come valido, ho cambiato il caricamento della classe in giro e ora funziona correttamente grazie ancora: D – rat