There are two ways for one managed bean to access another managed bean in the same webapp:
In your managed bean add a @ManagedProperty annotation to the related property and don't forget to add getter and setter methods.
@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; } // .... }
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:
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);