Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Wiki Markup
{scrollbar}

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

Using JSF 2 @ManagedProperty annotation

In your managed bean add a @ManagedProperty annotation to the related property and don't forget to add getter and setter methods.

Code Block
java
java

@ManagedBean(name="usingBean")
@RequestScoped
public class UsingBean 
{

    @ManagedProperty(value="#{neededBean}")
    private NeededBean neededBean;

    public NeededBean getNeededBean()
    {
        return neededBean;
    }

    public void setNeededBean(NeededBean neededBean)
    {
        this.neededBean = neededBean;
    }

    // ....


}

Binding through faces-config.xml

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:

Code Block
xml
xml
 <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:

  • the using bean must have scope which is the same as or shorter than the needed bean
  • the using bean must have a property-setter method which takes the needed bean as a parameter
  • the beans cannot have managed dependencies on each other.

Using Lookup

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

Code Block
java
java
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:

Code Block
java
java
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.

Code Block
java
java
FacesContext facesContext = FacesContext.getCurrentInstance();
NeededBean neededBean
    = (NeededBean)facesContext.getApplication()
      .createValueBinding("#{neededBean}").getValue(facesContext);
Wiki Markup
{scrollbar}