code: private boolean invokeOnComponentFromUIComponent(final FacesContext context,
                                                       final String clientId,
                                                       final ContextCallback callback) throws FacesException {
          if (null == context || null == clientId || null == callback) {
              throw new NullPointerException();
          }
  
          boolean found = false;
          if (clientId.equals(this.getClientId(context))) {
              try {
                  this.pushComponentToEL(context, this);
                  callback.invokeContextCallback(context, this);
                  return true;
              } catch (Exception e) {
                  throw new FacesException(e);
              } finally {
                  this.popComponentFromEL(context);
              }
          } else {
              final Iterator<UIComponent> itr = this.getFacetsAndChildren();
  
              while (itr.hasNext() && !found) {
                  found = itr.next().invokeOnComponent(context, clientId, callback);
              }
          }
          return found;
      }
docs: Copy from {@link UIComponent#invokeOnComponent} because super call will trigger {@link UIData#invokeOnComponent(FacesContext, String, ContextCallback)}.
  
  @param context  context
  @param clientId table client id
  @param callback callback
  @return true if component is found