code: @Override
      public void queueEvent(FacesEvent event)
      {
          if (event == null)
          {
              throw new NullPointerException("event");
          }
          super.queueEvent(new FacesEventWrapper(event, getRowIndex(), this));
      }
docs: Modify events queued for any child components so that the UIData state will be correctly configured before the
  event's listeners are executed.
  <p>
  Child components or their renderers may register events against those child components. When the listener for
  that event is eventually invoked, it may expect the uidata's rowData and rowIndex to be referring to the same
  object that caused the event to fire.
  <p>
  The original queueEvent call against the child component has been forwarded up the chain of ancestors in the
  standard way, making it possible here to wrap the event in a new event whose source is <i>this</i> component, not
  the original one. When the event finally is executed, this component's broadcast method is invoked, which ensures
  that the UIData is set to be at the correct row before executing the original event.