code: @Override
      public void apply(FaceletContext ctx, UIComponent parent) throws IOException
      {
          // only process if it's been created
          if (!ComponentHandler.isNew(parent))
          {
              return;
          }
          if (parent instanceof ValueHolder)
          {
              applyAttachedObject(ctx.getFacesContext(), parent);
          }
          else if (UIComponent.isCompositeComponent(parent))
          {
              if (getFor() == null)
              {
                  throw new TagException(_delegate.getTag(), "is nested inside a composite component"
                          + " but does not have a for attribute.");
              }
              FaceletCompositionContext mctx = FaceletCompositionContext.getCurrentInstance(ctx);
              mctx.addAttachedObjectHandler(parent, _delegate);
          }
          else
          {
              throw new TagException(_delegate.getTag(),
                      "Parent not composite component or an instance of ValueHolder: " + parent);
          }      
      }
docs: Set Converter instance on parent ValueHolder if it's not being restored.
  <ol>
  <li>Cast to ValueHolder</li>
  <li>If "binding" attribute was specified, fetch/create and re-bind to expression.</li>
  <li>Otherwise, call {@link #createConverter(FaceletContext) createConverter}.</li>
  <li>Call {@link ObjectHandler#setAttributes(FaceletContext, Object) setAttributes} on Converter instance.</li>
  <li>Set the Converter on the ValueHolder</li>
  <li>If the ValueHolder has a localValue, convert it and set the value</li>
  </ol>
  
  @see ValueHolder
  @see Converter
  @see #createConverter(FaceletContext)
  @see javax.faces.view.facelets.FaceletHandler#apply(javax.faces.view.facelets.FaceletContext, javax.faces.component.UIComponent)