org.springframework.web.jsf
Class DelegatingVariableResolver

java.lang.Object
  extended byjavax.faces.el.VariableResolver
      extended byorg.springframework.web.jsf.DelegatingVariableResolver

public class DelegatingVariableResolver
extends javax.faces.el.VariableResolver

JSF VariableResolver that first delegates to the original resolver of the underlying JSF implementation, then to the Spring root WebApplicationContext.

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 middle tier 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>
Note: Spring's JSF support has been developed and tested against JSF 1.1. Unfortunately, the JSF 1.1 RI (as of June 2004) does not apply a custom VariableResolver to property values of JSF-managed beans: This has to be considered a bug, as it is supposed to work according to the JSF spec. It does work in MyFaces 1.0.5, for example.

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

Field Summary
protected  Log logger
           
protected  javax.faces.el.VariableResolver originalVariableResolver
           
 
Constructor Summary
DelegatingVariableResolver(javax.faces.el.VariableResolver originalVariableResolver)
          Create a new DelegatingVariableResolver, using the given original VariableResolver.
 
Method Summary
protected  javax.faces.el.VariableResolver getOriginalVariableResolver()
          Return the original VariableResolver that this resolver delegates to.
protected  WebApplicationContext getWebApplicationContext(javax.faces.context.FacesContext facesContext)
          Retrieve the web application context to delegate bean name resolution to.
 Object resolveVariable(javax.faces.context.FacesContext facesContext, String name)
           
 
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

originalVariableResolver

protected final javax.faces.el.VariableResolver originalVariableResolver
Constructor Detail

DelegatingVariableResolver

public DelegatingVariableResolver(javax.faces.el.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 javax.faces.el.VariableResolver getOriginalVariableResolver()
Return the original VariableResolver that this resolver delegates to.


resolveVariable

public Object resolveVariable(javax.faces.context.FacesContext facesContext,
                              String name)
                       throws javax.faces.el.EvaluationException
Throws:
javax.faces.el.EvaluationException

getWebApplicationContext

protected WebApplicationContext getWebApplicationContext(javax.faces.context.FacesContext facesContext)
Retrieve the web application context to delegate bean name resolution to. Default implementation delegates to FacesContextUtils.

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


Copyright (C) 2003-2004 The Spring Framework Project.