You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/05/06 18:29:18 UTC
svn commit: r1100272 -
/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
Author: lu4242
Date: Fri May 6 16:29:18 2011
New Revision: 1100272
URL: http://svn.apache.org/viewvc?rev=1100272&view=rev
Log:
MYFACES-3111 [PERF] Review UIData.saveDescendantComponentStates and restoreDescendantComponentStates (thanks to Martin Koci for provide this patch)
Modified:
myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java?rev=1100272&r1=1100271&r2=1100272&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java Fri May 6 16:29:18 2011
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -743,12 +744,10 @@ public class UIData extends UIComponentB
boolean saveChildFacets)
{
Collection<Object[]> childStates = null;
+ boolean hasChildren = childIterator.hasNext();
+
while (childIterator.hasNext())
{
- if (childStates == null)
- {
- childStates = new ArrayList<Object[]>();
- }
UIComponent child = childIterator.next();
if (!child.isTransient())
@@ -757,25 +756,38 @@ public class UIData extends UIComponentB
// 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
+ Object descendantState = null;
+ if (child.getChildCount() > 0)
{
- childsIterator = child.getChildren().iterator();
+ Iterator<UIComponent> childsIterator;
+ if (saveChildFacets)
+ {
+ childsIterator = child.getFacetsAndChildren();
+ }
+ else
+ {
+ childsIterator = child.getChildren().iterator();
+ }
+
+ descendantState = saveDescendantComponentStates(childsIterator, true);
}
- Object descendantState = saveDescendantComponentStates(childsIterator, true);
Object state = null;
if (child instanceof EditableValueHolder)
{
state = new EditableValueHolderState((EditableValueHolder) child);
}
+ if (childStates == null)
+ {
+ childStates = new ArrayList<Object[]>();
+ }
childStates.add(new Object[] { state, descendantState });
}
}
+
+ if (hasChildren == true && childStates == null) {
+ childStates = Collections.emptyList();
+ }
+
return childStates;
}