Author: awiner
Date: Thu Jan 25 15:42:49 2007
New Revision: 500057

URL: http://svn.apache.org/viewvc?view=rev&rev=500057
Log:
ADFFACES-362: IndexOutOfBoundsException in UIXCollection.restoreStampState when 
transient components are included

Part 3: OK, now we had to fix up some new ClassCastExceptions that resulted 
from ignoring transient components that hadn't yet been removed

Modified:
    
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/StampState.java
    
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java

Modified: 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/StampState.java
URL: 
http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/StampState.java?view=diff&rev=500057&r1=500056&r2=500057
==============================================================================
--- 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/StampState.java
 (original)
+++ 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/StampState.java
 Thu Jan 25 15:42:49 2007
@@ -167,11 +167,25 @@
       Object childState = state[i];
       // Skip over any saved state that corresponds to transient
       // components
-      if (childState == UIXCollection.Transient.TRUE)
-        continue;
-
-      table.restoreStampState(context, kids.get(childIndex), childState);
-      childIndex++;
+      if (childState != UIXCollection.Transient.TRUE)
+      {
+        table.restoreStampState(context, kids.get(childIndex), childState);
+        childIndex++;
+      }
+      // The component may or may not still be there;  if it
+      // is, then we'd better skip over it
+      else
+      {
+        if (childIndex < kids.size())
+        {
+          UIComponent child = kids.get(childIndex);
+          // If the child isn't transient, then it must be
+          // something that we want to look at on the next
+          // iteration.
+          if (child.isTransient())
+            childIndex++;
+        }
+      }
     }
   }
 

Modified: 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java?view=diff&rev=500057&r1=500056&r2=500057
==============================================================================
--- 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
 (original)
+++ 
incubator/adffaces/trunk/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/component/UIXCollection.java
 Thu Jan 25 15:42:49 2007
@@ -840,6 +840,20 @@
         restoreStampState(context, children.get(childIndex), childState);
         childIndex++;
       }
+      // The component may or may not still be there;  if it
+      // is, then we'd better skip over it
+      else
+      {
+        if (childIndex < children.size())
+        {
+          UIComponent child = children.get(childIndex);
+          // If the child isn't transient, then it must be
+          // something that we want to look at on the next
+          // iteration.
+          if (child.isTransient())
+            childIndex++;
+        }
+      }
     }
   }
 


Reply via email to