@Override
    public void restoreState(FacesContext context, Object state)
    {
        if (state == null)
        {
            return;
        }
        
        Object values[] = (Object[]) state;
        super.restoreState(context, values[0]);
        Object restoredRowStates = UIComponentBase.restoreAttachedState(context, values[1]);
        if (restoredRowStates == null)
        {
            if (!_rowDeltaStates.isEmpty())
            {
                _rowDeltaStates.clear();
            }
        }
        else
        {
            _rowDeltaStates = (Map<String, Object>) restoredRowStates;
        } 
    }
<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