code: public ValueExpression resolveVariable(String variable)
      {
          ValueExpression ve = null;
          try
          {
              if (_vars != null)
              {
                  ve = (ValueExpression) _vars.get(variable);
  
                  // Is this code in a block that wants to cache 
                  // the resulting expression(s) and variable has been resolved?
                  if (_trackResolveVariables && ve != null)
                  {
                      _variableResolved = true;
                  }
              }
              
              if (ve == null)
              {
                  return _target.resolveVariable(variable);
              }
              
              return ve;
          }
          catch (StackOverflowError e)
          {
              throw new ELException("Could not Resolve Variable [Overflow]: " + variable, e);
          }
      }
docs: First tries to resolve agains the inner Map, then the wrapped ValueExpression.
  
  @see javax.el.VariableMapper#resolveVariable(java.lang.String)