Verwenden Sie stattdessen Application#evaluateExpressionGet()
. Es wird Bean erstellen, wenn es noch nicht fertig ist.
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().evaluateExpressionGet(context, "#{bean}", Bean.class);
Wo "bean"
ist die Managed Bean Namen und Bean.class
ist die geeignete Träger Bean-Klasse.
Sie können bei Bedarf wickeln diese in einer Hilfsmethode, so dass Gießen nicht erforderlich sind (die JSF Jungs nicht nehmen Nutzen von Generika und die Class
Parameter 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));
}
, die verwendet werden können, wie:
Bean bean = findBean("bean", Bean.class);
oder ohne Typ, aber mit einem @SuppressWarnings
:
@SuppressWarnings("unchecked")
public static <T> T findBean(String managedBeanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" + managedBeanName + "}", Object.class);
}
, die als verwendet werden können:
Bean bean = findBean("bean");
aktualisieren: das ist oben durch die Art und Weise JSF 1.2 spezifisch. Hier ist der Weg für JSF 1.1 oder älter, mit der derzeit veraltetApplication#createValueBinding()
:
FacesContext context = FacesContext.getCurrentInstance();
Bean bean = (Bean) context.getApplication().createValueBinding("#{bean}").getValue(context);
Thx dafür, meine IDE ist lahm mit der Klasse laden, aber ich glaube, es ist der richtige Weg, es zu tun ... dumm WAS Eclipse und seine eingebauten Bibliotheken. – rat
WAS? Meine Antwort zielt übrigens auf JSF 1.2 ab (das jetzt schon fast 4 Jahre alt ist). WAS verwendet, um mit Legacy JSF 1.1 für eine sehr lange Zeit bis mit 6.1 um 2007 zu versenden. Ich werde meine Antwort bearbeiten und die JSF 1.1 bald hinzufügen. – BalusC
WAS = websphere application server Wie auch immer ich dachte, es muss 1.2 sein, da WAS 1.1 libs enthält und es die Methode nicht als gültig zeigte, änderte ich die Klassenladung herum und jetzt funktioniert es gut noch einmal danke: D – rat