docs: public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, FaceletException,
              ELException
      {
          VariableMapper orig = ctx.getVariableMapper();
  
          AbstractFaceletContext actx = (AbstractFaceletContext) ctx;
          // eval include
          try
          {
              String[] names = null;
              ValueExpression[] values = null;
              if (this._vars.length > 0)
              {
                  names = new String[_vars.length];
                  values = new ValueExpression[_vars.length];
                  for (int i = 0; i < _vars.length; i++)
                  {
                      names[i] = _vars[i].getLocalName();
                      values[i] = _vars[i].getValueExpression(ctx, Object.class);
                  }
              }
              //actx.pushTemplateContext(new TemplateContextImpl());
              actx.pushClient(this);
              // setup a variable map
              if (this._vars.length > 0)
              {
                  VariableMapper varMapper = new VariableMapperWrapper(orig);
                  for (int i = 0; i < this._vars.length; i++)
                  {
                      varMapper.setVariable(names[i], values[i]);
                  }
                  ctx.setVariableMapper(varMapper);
              }
              actx.getTemplateContext().setAllowCacheELExpressions(false);
  
              ctx.includeFacelet(parent, this._location);
          }
          catch (FileNotFoundException e)
          {
              throw new TagException(this.tag, e.getMessage());
          }
          finally
          {
  
              // make sure we undo our changes
              actx.popClient(this);
              //actx.popTemplateContext();
              ctx.setVariableMapper(orig);
          }
      }