## org.springframework.web.jsf
Class DelegatingVariableResolver

    java.lang.Object
      javax.faces.el.VariableResolver
          org.springframework.web.jsf.DelegatingVariableResolver

Direct Known Subclasses:
  SpringBeanVariableResolver

    public class DelegatingVariableResolver

extends VariableResolver

JSF 1.1 `VariableResolver` that first delegates to the original resolver of the underlying JSF implementation (for resolving managed-bean objects as defined in `faces-config.xml` as well as well-known implicit EL attributes), then to the Spring root `WebApplicationContext` (for resolving Spring beans).

Configure this resolver in your `faces-config.xml` file as follows:

     <application>
       ...
       <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
     </application>

All your JSF expressions can then implicitly refer to the names of Spring-managed service layer beans, for example in property values of JSF-managed beans:

     <managed-bean>
       <managed-bean-name>myJsfManagedBean</managed-bean-name>
       <managed-bean-class>example.MyJsfManagedBean</managed-bean-class>
       <managed-bean-scope>session</managed-bean-scope>
       <managed-property>
         <property-name>mySpringManagedBusinessObject</property-name>
         <value>#{mySpringManagedBusinessObject}</value>
       </managed-property>
     </managed-bean>

with "mySpringManagedBusinessObject" defined as Spring bean in applicationContext.xml:

     <bean id="mySpringManagedBusinessObject" class="example.MySpringManagedBusinessObject">
       ...
     </bean>

Since:
  1.1
Author:
  Juergen Hoeller
See Also:
  `WebApplicationContextVariableResolver`, `FacesContextUtils.getRequiredWebApplicationContext(javax.faces.context.FacesContext)`

Field Summary
`protected Log` `logger` Logger available to subclasses
`protected VariableResolver` `originalVariableResolver`

Constructor Summary
`DelegatingVariableResolver(VariableResolver originalVariableResolver)` Create a new DelegatingVariableResolver, using the given original VariableResolver.

Method Summary
`protected BeanFactory` `getBeanFactory(FacesContext facesContext)` Retrieve the Spring BeanFactory to delegate bean name resolution to.
`protected VariableResolver` `getOriginalVariableResolver()` Return the original JSF VariableResolver that this resolver delegates to.
`protected WebApplicationContext` `getWebApplicationContext(FacesContext facesContext)` Retrieve the web application context to delegate bean name resolution to.
`protected Object` `resolveOriginal(FacesContext facesContext, String name)` Resolve the attribute via the original JSF VariableResolver.
`protected Object` `resolveSpringBean(FacesContext facesContext, String name)` Resolve the attribute as a Spring bean in the ApplicationContext.
`Object` `resolveVariable(FacesContext facesContext, String name)` Delegate to the original VariableResolver first, then try to resolve the variable as Spring bean in the root WebApplicationContext.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### logger

    protected final Log logger

  Logger available to subclasses

### originalVariableResolver

    protected final VariableResolver originalVariableResolver

Constructor Detail

### DelegatingVariableResolver

    public DelegatingVariableResolver(VariableResolver originalVariableResolver)

  Create a new DelegatingVariableResolver, using the given original VariableResolver.

  A JSF implementation will automatically pass its original resolver into the constructor of a configured resolver, provided that there is a corresponding constructor argument.

  Parameters:
    `originalVariableResolver` - the original VariableResolver

Method Detail

### getOriginalVariableResolver

    protected final VariableResolver getOriginalVariableResolver()

  Return the original JSF VariableResolver that this resolver delegates to. Used to resolve standard JSF-managed beans.

### resolveVariable

    public Object resolveVariable(FacesContext facesContext,
                                  String name)
                           throws EvaluationException

  Delegate to the original VariableResolver first, then try to resolve the variable as Spring bean in the root WebApplicationContext.

  Specified by:
    `resolveVariable` in class `VariableResolver`
  Throws:
    `EvaluationException`

### resolveOriginal

    protected Object resolveOriginal(FacesContext facesContext,
                                     String name)

  Resolve the attribute via the original JSF VariableResolver.

### resolveSpringBean

    protected Object resolveSpringBean(FacesContext facesContext,
                                       String name)

  Resolve the attribute as a Spring bean in the ApplicationContext.

### getBeanFactory

    protected BeanFactory getBeanFactory(FacesContext facesContext)

  Retrieve the Spring BeanFactory to delegate bean name resolution to.

  The default implementation delegates to `getWebApplicationContext`. Can be overridden to provide an arbitrary BeanFactory reference to resolve against; usually, this will be a full Spring ApplicationContext.

  Parameters:
    `facesContext` - the current JSF context
  Returns:
    the Spring BeanFactory (never `null`)
  See Also:
    `getWebApplicationContext(javax.faces.context.FacesContext)`

### getWebApplicationContext

    protected WebApplicationContext getWebApplicationContext(FacesContext facesContext)

  Retrieve the web application context to delegate bean name resolution to.

  The default implementation delegates to FacesContextUtils.

  Parameters:
    `facesContext` - the current JSF context
  Returns:
    the Spring web application context (never `null`)
  See Also:
    `FacesContextUtils.getRequiredWebApplicationContext(javax.faces.context.FacesContext)`