code: private boolean visitRows(VisitContext context,
                                VisitCallback callback,
                                boolean visitRows) {
  
          // Iterate over our UIColumn children, once per row
          int processed = 0;
          int rowIndex = 0;
          int rows = 0;
          if (visitRows) {
              rowIndex = getFirst() - 1;
              rows = getRows();
          }
  
          while (true) {
  
              // Have we processed the requested number of rows?
              if (visitRows) {
                  if ((rows > 0) && (++processed > rows)) {
                      break;
                  }
                  // Expose the current row in the specified request attribute
                  setRowIndex(++rowIndex);
                  if (!isRowAvailable()) {
                      break; // Scrolled past the last row
                  }
              }
  
              // Visit as required on the *children* of the UIColumn
              // (facets have been done a single time with rowIndex=-1 already)
              if (getChildCount() > 0) {
                  for (UIComponent kid : getChildren()) {
                      if (!(kid instanceof UIColumn)) {
                          continue;
                      }
                      if (kid.getChildCount() > 0) {
                      for (UIComponent grandkid : kid.getChildren()) {
                              if (grandkid.visitTree(context, callback)) {
                                  return true;
                              }
                          }
                      }
                  }
              }
  
              if (!visitRows) {
                  break;
              }
  
          }
  
          return false;
      }
docs: Visit each column and row