docs: public static void invokeOnDeepestEditableValueHolder(FacesContext context, UIComponent composite,
              final ContextCallback callback) {
  
          if (composite instanceof EditableValueHolder) {
              callback.invokeContextCallback(context, composite);
              return;
          }
  
          BeanInfo info = (BeanInfo) composite.getAttributes().get(UIComponent.BEANINFO_KEY);
          List<AttachedObjectTarget> targets = (List<AttachedObjectTarget>) info.getBeanDescriptor()
                  .getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
  
          if (targets != null) {
              for (int i = 0; i < targets.size(); i++) {
                  AttachedObjectTarget target = targets.get(i);
                  if (target instanceof EditableValueHolderAttachedObjectTarget) {
  
                      List<UIComponent> childs = target.getTargets(composite);
                      if (childs == null || childs.isEmpty()) {
                          throw new FacesException(
                                  "Cannot not resolve editableValueHolder target in composite component with id: \""
                                  + composite.getClientId() + "\"");
                      }
  
                      if (childs.size() > 1) {
                          throw new FacesException(
                                  "Only a single editableValueHolder target is supported in composite component with id: \""
                                  + composite.getClientId() + "\"");
                      }
  
                      final UIComponent child = childs.get(0);
  
                      composite.invokeOnComponent(context, composite.getClientId(context), new ContextCallback() {
  
                          @Override
                          public void invokeContextCallback(FacesContext context, UIComponent target) {
                              if (isComposite(child)) {
                                  invokeOnDeepestEditableValueHolder(context, child, callback);
                              }
                              else {
                                  callback.invokeContextCallback(context, child);
                              }
                          }
                      });
                  }
              }
          }
      }