Author: nbelaevski
Date: 2011-02-03 06:33:22 -0500 (Thu, 03 Feb 2011)
New Revision: 21413
Removed:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/StatefulDataTableChildrenIterator.java
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
Log:
https://issues.jboss.org/browse/RF-9426
Deleted:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/StatefulDataTableChildrenIterator.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/StatefulDataTableChildrenIterator.java 2011-02-03
11:16:22 UTC (rev 21412)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/StatefulDataTableChildrenIterator.java 2011-02-03
11:33:22 UTC (rev 21413)
@@ -1,67 +0,0 @@
-package org.richfaces.component;
-
-import java.util.Iterator;
-
-import javax.faces.component.UIComponent;
-
-import org.ajax4jsf.component.IterationStateHolder;
-
-import com.google.common.collect.AbstractIterator;
-import com.google.common.collect.Iterators;
-
-/**
- * @author Nick Belaevski
- *
- */
-final class StatefulDataTableChildrenIterator extends AbstractIterator<UIComponent>
{
-
- private Iterator<UIComponent> dataChildren;
-
- private Iterator<UIComponent> subIterator = Iterators.emptyIterator();
-
- /**
- * @param uiDataTableBase
- */
- StatefulDataTableChildrenIterator(Iterator<UIComponent> dataChildren) {
- this.dataChildren = dataChildren;
- }
-
- private UIComponent traverseToNextElement() {
- if (dataChildren.hasNext()) {
- UIComponent c = dataChildren.next();
-
- if (c instanceof IterationStateHolder) {
- return c;
- } else {
- subIterator = c.getFacetsAndChildren();
- }
- }
-
- return null;
- }
-
- private UIComponent traverseToNextSubElement() {
- if (subIterator.hasNext()) {
- return subIterator.next();
- }
-
- return null;
- }
-
- @Override
- protected UIComponent computeNext() {
- while (dataChildren.hasNext() || subIterator.hasNext()) {
- UIComponent c = traverseToNextSubElement();
-
- if (c == null) {
- c = traverseToNextElement();
- }
-
- if (c != null) {
- return c;
- }
- }
-
- return endOfData();
- }
-}
\ No newline at end of file
Modified:
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
===================================================================
---
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2011-02-03
11:16:22 UTC (rev 21412)
+++
trunk/ui/iteration/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2011-02-03
11:33:22 UTC (rev 21413)
@@ -32,6 +32,7 @@
import java.util.Map;
import java.util.Set;
+import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
import javax.faces.component.visit.VisitCallback;
import javax.faces.component.visit.VisitContext;
@@ -41,6 +42,7 @@
import javax.faces.event.PhaseId;
import javax.faces.event.PreRenderComponentEvent;
+import org.ajax4jsf.component.IterationStateHolder;
import org.ajax4jsf.model.DataVisitor;
import org.ajax4jsf.model.ExtendedDataModel;
import org.ajax4jsf.model.Range;
@@ -396,26 +398,50 @@
return SUPPORTED_META_COMPONENTS;
}
- protected Iterator<UIComponent> statefulChildren() {
- return new StatefulDataTableChildrenIterator(this.dataChildren());
+ private boolean isStateful(UIComponent component) {
+ if (component instanceof IterationStateHolder) {
+ return true;
+ }
+
+ if (component instanceof UIColumn || component instanceof Column) {
+ return false;
+ }
+
+ return true;
}
@Override
protected void saveChildState(FacesContext facesContext) {
- Iterator<UIComponent> iterator = statefulChildren();
- while (iterator.hasNext()) {
- UIComponent c = iterator.next();
- saveChildState(facesContext, c);
+ Iterator<UIComponent> dataChildren = dataChildren();
+ while (dataChildren.hasNext()) {
+ UIComponent child = dataChildren.next();
+
+ if (isStateful(child)) {
+ saveChildState(facesContext, child);
+ } else {
+ for (UIComponent grandKid: child.getChildren()) {
+ saveChildState(facesContext, grandKid);
+ }
+ }
}
}
@Override
protected void restoreChildState(FacesContext facesContext) {
- Iterator<UIComponent> iterator = statefulChildren();
- while (iterator.hasNext()) {
- UIComponent c = iterator.next();
- restoreChildState(facesContext, c);
+ Iterator<UIComponent> dataChildren = dataChildren();
+ while (dataChildren.hasNext()) {
+ UIComponent child = dataChildren.next();
+
+ if (isStateful(child)) {
+ restoreChildState(facesContext, child);
+ } else {
+ //reset cached clientId
+ child.setId(child.getId());
+
+ for (UIComponent grandKid: child.getChildren()) {
+ restoreChildState(facesContext, grandKid);
+ }
+ }
}
}
-
}