AccessingOneManagedBeanFromAnother

How can I access one Managed Bean from another?

There are two ways for one managed bean to access another managed bean in the same webapp:

Using Dependency Injection

In your project's faces configuration file which defines the managed beans, a managed bean property can be declared as initialised with a reference to another managed bean:

 <managed-bean>
   <managed-bean-name>neededBean</managed-bean-name>
   <managed-bean-class>fqn.to.NeededBean</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>

 <managed-bean>
   <managed-bean-name>usingBean</managed-bean-name>
   <managed-bean-class>fqn.to.UsingBean</managed-bean-class>
   <managed-bean-scope>request</managed-bean-scope>
   <managed-property>
     <property-name>neededBean</property-name>
     <value>#{neededBean}</value>
   </managed-property>
 </managed-bean>

The constraints are that:

Using Lookup

The following java code can be used in MyFaces 1.1 to explicitly look up an arbitrary managed bean by name:

FacesContext facesContext = FacesContext.getCurrentInstance();
NeededBean neededBean
    = (NeededBean) facesContext.getApplication()
        .getVariableResolver().resolveVariable(facesContext, "neededBean");

In MyFaces 1.2, that code is deprecated, and preffered version is:

ELContext elContext = FacesContext.getCurrentInstance().getELContext();
NeededBean neededBean 
    = (NeededBean) FacesContext.getCurrentInstance().getApplication()
        .getELResolver().getValue(elContext, null, "neededBean");

Alternately, you can use this code to evaluate any JSF EL expression.

FacesContext facesContext = FacesContext.getCurrentInstance();
NeededBean neededBean
    = (NeededBean)facesContext.getApplication()
      .createValueBinding("#{neededBean}").getValue(facesContext);

last edited 2007-09-13 09:02:43 by OgnjenBlagojevic