2010-01-24 9 views

Antwort

11

Es gibt mehrere Möglichkeiten. Wenn die verwalteten Beans miteinander in Beziehung stehen, wäre der sauberste Weg die Verwaltung der verwalteten Eigenschaften. Angenommen, Bean1 hat den gleichen Umfang oder einen größeren Umfang als Bean2. Zuerst geben Bean2 eine Bean1 Eigenschaft:

public class Bean2 { 
    private Bean1 bean1; // +getter +setter. 
} 

Dann erklären Bean1 in faces-config.xml eine verwaltete Eigenschaft von Bean2 zu sein:

<managed-bean> 
    <managed-bean-name>bean1</managed-bean-name> 
    <managed-bean-class>com.example.Bean1</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

<managed-bean> 
    <managed-bean-name>bean2</managed-bean-name> 
    <managed-bean-class>com.example.Bean2</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>bean1</property-name> 
     <value>#{bean1}</value> 
    </managed-property> 
</managed-bean> 

Auf diese Weise der bean2 Instanz sofortigen Zugriff auf die bean1 Instanz hat.

Wenn Sie aus bestimmten Gründen die Injektion verwalteter Objekte nicht verwenden möchten, können Sie auch Application#evaluateExpressionGet() greifen, um programmgesteuert darauf zuzugreifen. Hier ist ein Beispiel von Bean1 innerhalb Bean2 Abrufen:

FacesContext context = FacesContext.getCurrentInstance(); 
Bean1 bean1 = (Bean1) context.getApplication().evaluateExpressionGet(context, "#{bean1}", Bean1.class); 

Die Bean1 muss jedoch bereits als verwaltete Bean bean1 in faces-config.xml deklariert werden.

Für weitere Informationen und Hinweise zur Weitergabe von Daten innerhalb von JSF finden Sie möglicherweise this article nützlich.

4

zu BalusC Antwort hinzuzufügen, wenn Sie eine Abhängigkeit-Injection-Framework (Frühling, guice, etc.) verwenden, oder wenn JSF 2.0 verwenden, können Sie eine Managed Bean-Set in das andere mit nur haben kann:

@Inject 
private Bean2 bean2; 

(oder die entsprechende Anmerkung auf der Grundlage Ihres DI-Framework)

+0

Diese in JSF 2.0 auf Java EE 6 als gut funktioniert. – BalusC

+0

Sollte @Inject privat sein Bean1 bean1; wenn dies in Bean2 referenziert werden soll. (in Übereinstimmung mit dem Beispiel von BalusC) –

Verwandte Themen