code: @Override
      public void broadcast(FacesEvent event) throws AbortProcessingException
      {
          if (event instanceof FacesEventWrapper)
          {
              FacesEvent originalEvent = ((FacesEventWrapper) event).getWrappedFacesEvent();
              int eventRowIndex = ((FacesEventWrapper) event).getRowIndex();
              final int currentRowIndex = getRowIndex();
              UIComponent source = originalEvent.getComponent();
              UIComponent compositeParent = UIComponent.getCompositeComponentParent(source);
  
              setRowIndex(eventRowIndex);
              if (compositeParent != null)
              {
                  pushComponentToEL(getFacesContext(), compositeParent);
              }
              pushComponentToEL(getFacesContext(), source);
              try
              {
                  source.broadcast(originalEvent);
              }
              finally
              {
                  source.popComponentFromEL(getFacesContext());
                  if (compositeParent != null)
                  {
                      compositeParent.popComponentFromEL(getFacesContext());
                  }
                  setRowIndex(currentRowIndex);
              }
          }
          else
          {
              super.broadcast(event);
          }
      }
docs: Ensure that before the event's listeners are invoked this UIData component's "current row" is set to the row
  associated with the event.
  <p>
  See queueEvent for more details.