protected 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;
    }
<p>Perform the appropriate phase-specific processing and per-row
iteration for the specified phase, as follows:
<ul>
<li>Set the <code>rowIndex</code> property to -1, and process the facets
    of this {@link UIData} component exactly once.</li>
<li>Set the <code>rowIndex</code> property to -1, and process the facets
    of the {@link UIColumn} children of this {@link UIData} component
    exactly once.</li>
<li>Iterate over the relevant rows, based on the <code>first</code>
    and <code>row</code> properties, and process the children
    of the {@link UIColumn} children of this {@link UIData} component
    once per row.</li>
</ul>

@param context {@link FacesContext} for the current request
@param phaseId {@link PhaseId} of the phase we are currently running
primefaces/src/main/java/org/primefaces/component/patch/UIDataPatch.java