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?

War es hilfreich?

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:


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.

scroll top