2010-01-24 27 views

Respuesta

11

Existen varias formas. Si los beans administrados están relacionados entre sí, la forma más limpia sería la inyección de propiedad administrada. Supongamos que Bean1 tiene el mismo alcance o un alcance más amplio que Bean2. En primer lugar dar Bean2 una propiedad Bean1:

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

declarará Bean1 en faces-config.xml ser una propiedad administrada de Bean2:

<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> 

De esta manera la instancia bean2 tiene acceso instantáneo a la bean1 ejemplo.

Si no desea utilizar la inyección de propiedad administrada por alguna razón, entonces también puede tomar Application#evaluateExpressionGet() para acceder a ella mediante programación. Aquí está un ejemplo de recuperación de Bean1 dentro Bean2:

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

El Bean1 debe sin embargo ya se puede declarar como bean gestionado bean1 en faces-config.xml.

Para obtener más información y sugerencias sobre cómo pasar datos dentro de JSF, puede encontrar que this article es útil.

4

Para añadir a la respuesta de BalusC, si está utilizando un marco de dependencia de la inyección (primavera, guice, etc.), o si se utiliza JSF 2.0, puede tener un bean gestionado establecido en el otro usando sólo:

@Inject 
private Bean2 bean2; 

(o la anotación apropiada en función de su marco DI)

+0

Esto funciona en JSF 2.0 en Java EE 6 también. – BalusC

+0

Debe ser @Inject private Bean1 bean1; si esto fuera a ser referenciado en Bean2. (en sincronía con el ejemplo de BalusC) –

Cuestiones relacionadas