code: @Override
      public Facelet getViewMetadataFacelet(FacesContext facesContext, String uri) 
          throws IOException
      {
          URL url = (URL) _relativeLocations.get(uri);
          if (url == null)
          {
              url = resolveURL(facesContext, getBaseUrl(), uri);
              ViewResource viewResource = (ViewResource) facesContext.getAttributes().get(
                  FaceletFactory.LAST_RESOURCE_RESOLVED);
              if (url != null)
              {
                  if (viewResource != null)
                  {
                      // If a view resource has been used to resolve a resource, the cache is in
                      // the ResourceHandler implementation. No need to cache in _relativeLocations.
                  }
                  else
                  {
                      Map<String, URL> newLoc = new HashMap<String, URL>(_relativeLocations);
                      newLoc.put(uri, url);
                      _relativeLocations = newLoc;
                  }
              }
              else
              {
                  throw new IOException("'" + uri + "' not found.");
              }
          }
          return this.getViewMetadataFacelet(url);
      }
docs: Works in the same way as getFacelet(String uri), but redirect
  to getViewMetadataFacelet(URL url)
  @since 2.0