protected Collection<Object[]> saveDescendantInitialComponentStates(FacesContext facesContext,
            Iterator<UIComponent> childIterator, boolean saveChildFacets)
    {
        Collection<Object[]> childStates = null;
        while (childIterator.hasNext())
        {
            if (childStates == null)
            {
                childStates = new ArrayList<>();
            }

            UIComponent child = childIterator.next();
            if (!child.isTransient())
            {
                // Add an entry to the collection, being an array of two
                // elements. The first element is the state of the children
                // of this component; the second is the state of the current
                // child itself.

                Iterator<UIComponent> childsIterator;
                if (saveChildFacets)
                {
                    childsIterator = child.getFacetsAndChildren();
                }
                else
                {
                    childsIterator = child.getChildren().iterator();
                }
                Object descendantState = saveDescendantInitialComponentStates(
                        facesContext, childsIterator, true);
                Object state = child.saveState(facesContext);
                childStates.add(new Object[] { state, descendantState });
            }
        }
        return childStates;
    }
<p class="changed_added_2_1">Override the base class method to
take special action if the method is being invoked when {@link
StateManager#IS_BUILDING_INITIAL_STATE} is true
<strong>and</strong> the <code>rowStatePreserved</code>
JavaBeans property for this instance is <code>true</code>.</p>

<p class="changed_modified_2_1">The additional action taken is to
traverse the descendents and save their state without regard to
any particular row value.</p>

@since 2.1
primefaces/src/main/java/org/primefaces/component/patch/UIDataPatch.java