@Override
  public int doStartTag() throws JspException {
    UIComponentClassicTagBase componentTag =
        UIComponentELTag.getParentUIComponentClassicTagBase(pageContext);

    if (componentTag == null) {
      throw new JspException("no parent UIComponentTag found");
    }

    if (!componentTag.getCreated()) {
      return Tag.SKIP_BODY;
    }

    Validator validator = createValidator();

    UIComponent component = componentTag.getComponentInstance();
    if (component == null) {
      throw new JspException("parent UIComponentTag has no UIComponent");
    }

    if (!(component instanceof EditableValueHolder)) {
      throw new JspException("UIComponent is no EditableValueHolder");
    }
    ((EditableValueHolder) component).addValidator(validator);

    return Tag.SKIP_BODY;
  }