Die richtige Art und Weise eine andere Bean-Instanz aus dem Kontext des Abrufens
-
13-10-2019 - |
Frage
Wir sind mit dem folgenden Code die verwaltete Bean-Instanz aus dem Kontext zu erhalten.
FacesUtils.getManagedBean("beanName");
Ist es der richtige Weg, es zu tun ?. Wenn mehrere Benutzer die gleiche Bean was zugreifen wird passieren? Wie die Bean-Instanzen verwaltet werden?
Lösung
Da FacesUtils
nicht Teil der Standard-JSF-Implementierung ist, es ist unklar, was es tatsächlich ist unter der Decke zu tun.
Egal, wenn Sie bereits in einem Managed Bean, dann ist die bevorzugte Art und Weise ist die andere Bean als verwaltete Eigenschaft zu injizieren. Ich nehme an, dass Sie bereits auf JSF 2.0, so ist hier ein JSF 2.0 gezielt Beispiel.
@ManagedBean
@SessionScoped
public void OtherBean {}
@ManagedBean
@RequestScoped
public void YourBean {
@ManagedProperty("#{otherBean}")
private void OtherBean;
@PostConstruct
public void init() {
otherBean.doSomething(); // OtherBean is now available in any method.
}
public void setOtherBean(OtherBean otherBean) {
this.otherBean = otherBean;
}
// Getter is not necessary.
}
Wenn man aber nach wie vor auf JSF 1.x ist, dann müssen Sie es durch <managed-property>
Eintrag in faces-config.xml
tun, wie in dieser Frage erklärt: Übergeben von Daten zwischen Managed beans .
Wenn Sie zufällig CDI @Named
verwenden anstelle von JSF @ManagedBean
, Verwendung @Inject
statt @ManagedProperty
. Dazu wird eine Setter-Methode nicht erforderlich.
Siehe auch:
- Kommunikation in JSF2
- Get JSF Managed Bean namentlich in jede Servlet verwandte Klasse
- Backing Bohnen (@ManagedBean) oder CDI Beans (@Named) / a>
In Bezug auf Ihr Anliegen
Wenn mehrere Benutzer die gleiche Bean was zugreifen wird passieren? Wie die Bean-Instanzen verwaltet werden?
Sie werden von JSF verwaltet. Wenn eine Bohne gefunden wird, dann wird JSF zurückkehren nur genau diese Bohne. Wenn keine Bohne gefunden wird, dann wird JSF nur automatisch erstellen eine und in dem dazugehörigen Rahmen setzen. JSF nicht unnötig mehr Bohnen erstellen.