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 2014/09/02 21:03:52 UTC

svn commit: r1622093 - in /myfaces/core/trunk/impl/src: main/java/org/apache/myfaces/view/facelets/ test/java/org/apache/myfaces/view/facelets/pss/acid/ test/java/org/apache/myfaces/view/facelets/pss/acid/component/ test/java/org/apache/myfaces/view/fa...

Author: lu4242
Date: Tue Sep  2 19:03:52 2014
New Revision: 1622093

URL: http://svn.apache.org/r1622093
Log:
MYFACES-3918 DefaultFaceletsStateManagementStrategy: keep list of removed client IDs stable over time

Added:
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIDynamicFormComponent.java
      - copied, changed from r1587542, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIAddComponent.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingFormBean.java
      - copied, changed from r1587542, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingBean.java
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding2.xhtml
      - copied, changed from r1587542, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding1.xhtml
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/dynamicForm.xhtml
      - copied, changed from r1587542, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/recursive.xhtml
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page3.xhtml
      - copied, changed from r1587542, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page2.xhtml
Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
    myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java
    myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java?rev=1622093&r1=1622092&r2=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java Tue Sep  2 19:03:52 2014
@@ -450,8 +450,13 @@ public class DefaultFaceletsStateManagem
                     String clientId = clientIdsRemoved.get(i);
                     if (!idsRemovedSet.contains(clientId))
                     {
-                        view.invokeOnComponent(context, clientId, new RemoveComponentCallback());
-                        idsRemovedSet.add(clientId);
+                        RemoveComponentCallback callback = new RemoveComponentCallback();
+                        view.invokeOnComponent(context, clientId, callback);
+                        if (callback.isComponentFound())
+                        {
+                            //Add only if component found
+                            idsRemovedSet.add(clientId);
+                        }
                     }
                 }
                 clientIdsRemoved.clear();
@@ -510,6 +515,13 @@ public class DefaultFaceletsStateManagem
 
     public static class RemoveComponentCallback implements ContextCallback
     {
+        private boolean componentFound;
+        
+        public RemoveComponentCallback()
+        {
+            this.componentFound = false;
+        }
+        
         public void invokeContextCallback(FacesContext context,
                 UIComponent target)
         {
@@ -531,9 +543,22 @@ public class DefaultFaceletsStateManagem
                 }
                 if (key != null)
                 {
-                    target.getParent().getFacets().remove(key);
+                    UIComponent removedTarget = target.getParent().getFacets().remove(key);
+                    if (removedTarget != null)
+                    {
+                        this.componentFound = true;
+                    }
                 }
             }
+            else
+            {
+                this.componentFound = true;
+            }
+        }
+        
+        public boolean isComponentFound()
+        {
+            return this.componentFound;
         }
     }
 
@@ -1345,9 +1370,25 @@ public class DefaultFaceletsStateManagem
     
     public void suscribeListeners(UIViewRoot uiViewRoot)
     {
-        PostAddPreRemoveFromViewListener componentListener = new PostAddPreRemoveFromViewListener();
-        uiViewRoot.subscribeToViewEvent(PostAddToViewEvent.class, componentListener);
-        uiViewRoot.subscribeToViewEvent(PreRemoveFromViewEvent.class, componentListener);
+        boolean listenerSubscribed = false;
+        List<SystemEventListener> pavList = uiViewRoot.getViewListenersForEventClass(PostAddToViewEvent.class);
+        if (pavList != null)
+        {
+            for (SystemEventListener listener : pavList)
+            {
+                if (listener instanceof PostAddPreRemoveFromViewListener)
+                {
+                    listenerSubscribed = true;
+                    break;
+                }
+            }
+        }
+        if (!listenerSubscribed)
+        {
+            PostAddPreRemoveFromViewListener componentListener = new PostAddPreRemoveFromViewListener();
+            uiViewRoot.subscribeToViewEvent(PostAddToViewEvent.class, componentListener);
+            uiViewRoot.subscribeToViewEvent(PreRemoveFromViewEvent.class, componentListener);
+        }
     }
     
     protected RenderKitFactory getRenderKitFactory()

Modified: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java?rev=1622093&r1=1622092&r2=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/AcidMyFacesRequestTestCase.java Tue Sep  2 19:03:52 2014
@@ -18,6 +18,9 @@
  */
 package org.apache.myfaces.view.facelets.pss.acid;
 
+import java.util.HashSet;
+import java.util.Set;
+import java.util.TreeSet;
 import javax.el.ExpressionFactory;
 import javax.faces.application.StateManager;
 import javax.faces.component.UICommand;
@@ -32,6 +35,7 @@ import org.apache.myfaces.shared.config.
 import org.apache.myfaces.test.mock.MockPrintWriter;
 import org.apache.myfaces.view.facelets.pss.acid.component.UISimpleComponent1;
 import org.apache.myfaces.view.facelets.pss.acid.managed.CheckActionEventBean;
+import org.apache.myfaces.view.facelets.pss.acid.managed.ComponentBindingFormBean;
 import org.apache.myfaces.view.facelets.pss.acid.managed.CustomSessionBean;
 import org.apache.myfaces.view.facelets.pss.acid.managed.ForEachBean;
 import org.apache.myfaces.view.facelets.pss.acid.managed.ResourceDependencyBean;
@@ -489,6 +493,223 @@ public class AcidMyFacesRequestTestCase 
     }
     
     @Test
+    public void testComponentBinding2() throws Exception
+    {
+        startViewRequest("/componentBinding2.xhtml");
+        processLifecycleExecuteAndRender();
+        
+        UIComponent comp = facesContext.getViewRoot().findComponent("mainForm:panel");
+        Assert.assertNotNull(comp);
+        int fieldCount = comp.getChildCount();
+        Set<String> clientIds = new TreeSet<String>();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }
+        
+        UICommand button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+        processLifecycleExecute();
+        
+        comp = facesContext.getViewRoot().findComponent("mainForm:panel");
+        Assert.assertNotNull(comp);
+        // Check the components are restored.
+        Assert.assertEquals(fieldCount, comp.getChildCount());
+        Set<String> clientIds2 = new TreeSet<String>();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds2.add(c.getClientId(facesContext));
+        }
+        Assert.assertArrayEquals(clientIds.toArray(), clientIds2.toArray());        
+
+        ComponentBindingFormBean formBean = facesContext.getApplication().evaluateExpressionGet(
+                facesContext, "#{componentBindingFormBean}", ComponentBindingFormBean.class);
+        formBean.forceRebuild();
+        
+        processLifecycleRender();
+        
+        comp = facesContext.getViewRoot().findComponent("mainForm:panel");
+        Assert.assertNotNull(comp);
+        fieldCount = comp.getChildCount();
+        clientIds.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }        
+        
+        button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+
+        processLifecycleExecute();
+        
+        comp = facesContext.getViewRoot().findComponent("mainForm:panel");
+        Assert.assertNotNull(comp);
+        Assert.assertEquals(fieldCount, comp.getChildCount());
+        clientIds2.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds2.add(c.getClientId(facesContext));
+        }
+        Assert.assertArrayEquals(clientIds.toArray(), clientIds2.toArray());        
+        
+        formBean = facesContext.getApplication().evaluateExpressionGet(
+                facesContext, "#{componentBindingFormBean}", ComponentBindingFormBean.class);
+        formBean.forceRebuild();
+        
+        processLifecycleRender();
+        
+        comp = facesContext.getViewRoot().findComponent("mainForm:panel");
+        Assert.assertNotNull(comp);
+        fieldCount = comp.getChildCount();
+        clientIds.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }        
+        
+        button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+
+        processLifecycleExecute();
+        
+        comp = facesContext.getViewRoot().findComponent("mainForm:panel");
+        Assert.assertNotNull(comp);
+        Assert.assertEquals(fieldCount, comp.getChildCount());
+        clientIds2.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds2.add(c.getClientId(facesContext));
+        }
+        Assert.assertArrayEquals(clientIds.toArray(), clientIds2.toArray());        
+        
+        formBean = facesContext.getApplication().evaluateExpressionGet(
+                facesContext, "#{componentBindingFormBean}", ComponentBindingFormBean.class);
+        formBean.forceRebuild();
+        
+        processLifecycleRender();
+        
+        comp = facesContext.getViewRoot().findComponent("mainForm:panel");
+        Assert.assertNotNull(comp);
+        
+        
+        endRequest();
+    }    
+    
+    @Test
+    public void testDynamicForm() throws Exception
+    {
+        startViewRequest("/dynamicForm.xhtml");
+        processLifecycleExecuteAndRender();
+        UIComponent comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        int fieldCount = comp.getChildCount();
+        Set<String> clientIds = new TreeSet<String>();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }
+        
+        UICommand button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+        processLifecycleExecute();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        // Check the components are restored.
+        Assert.assertEquals(fieldCount, comp.getChildCount());
+        Set<String> clientIds2 = new TreeSet<String>();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds2.add(c.getClientId(facesContext));
+        }
+        Assert.assertArrayEquals(clientIds.toArray(), clientIds2.toArray());
+        
+        processLifecycleRender();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        fieldCount = comp.getChildCount();
+        clientIds.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }        
+        
+        button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+        processLifecycleExecute();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        // Check the components are restored.
+        Assert.assertEquals(fieldCount, comp.getChildCount());
+        clientIds2.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds2.add(c.getClientId(facesContext));
+        }
+        Assert.assertArrayEquals(clientIds.toArray(), clientIds2.toArray());
+        
+        // Check the components are restored.
+        processLifecycleRender();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        fieldCount = comp.getChildCount();
+        clientIds.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }        
+
+        button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+        processLifecycleExecute();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        // Check the components are restored.
+        Assert.assertEquals(fieldCount, comp.getChildCount());
+        clientIds2.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds2.add(c.getClientId(facesContext));
+        }
+        Assert.assertArrayEquals(clientIds.toArray(), clientIds2.toArray());
+        
+        processLifecycleRender();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        fieldCount = comp.getChildCount();
+        clientIds.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }        
+
+        button = (UICommand) facesContext.getViewRoot().findComponent("mainForm:postback");
+        client.submit(button);
+        processLifecycleExecute();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        // Check the components are restored.
+        Assert.assertEquals(fieldCount, comp.getChildCount());
+        clientIds2.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds2.add(c.getClientId(facesContext));
+        }
+        Assert.assertArrayEquals(clientIds.toArray(), clientIds2.toArray());
+        
+        processLifecycleRender();
+        comp = facesContext.getViewRoot().findComponent("mainForm:dynPanel");
+        Assert.assertNotNull(comp);
+        fieldCount = comp.getChildCount();
+        clientIds.clear();
+        for (UIComponent c : comp.getChildren())
+        {
+            clientIds.add(c.getClientId(facesContext));
+        }        
+        
+        endRequest();
+    }
+    
+    @Test
     public void testResourceDependency() throws Exception
     {
         startViewRequest("/resourceDependency1.xhtml");

Copied: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIDynamicFormComponent.java (from r1587542, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIAddComponent.java)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIDynamicFormComponent.java?p2=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIDynamicFormComponent.java&p1=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIAddComponent.java&r1=1587542&r2=1622093&rev=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIAddComponent.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/component/UIDynamicFormComponent.java Tue Sep  2 19:03:52 2014
@@ -18,18 +18,19 @@
  */
 package org.apache.myfaces.view.facelets.pss.acid.component;
 
+import java.util.Random;
 import javax.faces.component.FacesComponent;
 import javax.faces.component.UIComponentBase;
+import javax.faces.component.UIOutput;
 import javax.faces.component.UIViewRoot;
-import javax.faces.component.html.HtmlOutputText;
 import javax.faces.context.FacesContext;
 import javax.faces.event.AbortProcessingException;
 import javax.faces.event.PreRenderViewEvent;
 import javax.faces.event.SystemEvent;
 import javax.faces.event.SystemEventListener;
 
-@FacesComponent(value = "com.myapp.UIAddComponent")
-public class UIAddComponent extends UIComponentBase implements
+@FacesComponent(value = "com.myapp.UIDynamicFormComponent")
+public class UIDynamicFormComponent extends UIComponentBase implements
         SystemEventListener
 {
 
@@ -37,7 +38,7 @@ public class UIAddComponent extends UICo
     // Constructor
     //
 
-    public UIAddComponent()
+    public UIDynamicFormComponent()
     {
 
         setRendererType("testcomponent");
@@ -67,13 +68,29 @@ public class UIAddComponent extends UICo
 
     public void processEvent(SystemEvent event) throws AbortProcessingException
     {
-
-        if (!FacesContext.getCurrentInstance().isPostback())
+         // Clear the existing tree. 
+        this.getChildren().clear();
+        
+        Integer index = (Integer) this.getAttributes().get("index");
+        if (index == null)
+        {
+            index = 1;
+        }
+        else
         {
+            index = index + 1;
+        }
+        this.getAttributes().put("index", index);
+            
+        // Start building the new component tree with formRoot as parent.
+        Random random = new Random() ;
+        int n = random.nextInt(9)+1;
 
-            HtmlOutputText component = new HtmlOutputText();
-            component.setValue("Dynamically added child");
-            getChildren().add(component);
+        for(int i = 0; i < n; i++)
+        {
+            UIOutput input = new UIOutput();
+            input.setId("input_"+index+"_"+i);
+            this.getChildren().add(input);
         }
     }
 }

Copied: myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingFormBean.java (from r1587542, myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingBean.java)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingFormBean.java?p2=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingFormBean.java&p1=myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingBean.java&r1=1587542&r2=1622093&rev=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingBean.java (original)
+++ myfaces/core/trunk/impl/src/test/java/org/apache/myfaces/view/facelets/pss/acid/managed/ComponentBindingFormBean.java Tue Sep  2 19:03:52 2014
@@ -18,54 +18,62 @@
  */
 package org.apache.myfaces.view.facelets.pss.acid.managed;
 
+import java.util.Random;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
 import javax.faces.component.UIOutput;
 import javax.faces.component.UIPanel;
 import javax.faces.component.html.HtmlPanelGroup;
-import javax.faces.context.FacesContext;
 
 /**
  *
- * @author Leonardo Uribe
  */
-@ManagedBean(name="componentBindingBean")
+@ManagedBean(name="componentBindingFormBean")
 @RequestScoped
-public class ComponentBindingBean
+public class ComponentBindingFormBean
 {
+    private boolean rebuildDone = false;
+    
     private UIPanel panel;
     
     public UIPanel getPanel()
     {
+        if (!rebuildDone)
+        {
+            rebuildForm();
+        }
+        return panel;
+    }
+    
+    public void rebuildForm()
+    {
         if (panel == null)
         {
             panel = new HtmlPanelGroup();
-            if (FacesContext.getCurrentInstance().isPostback())
-            {
-                // Just try to mess the binding. In theory this does
-                // not have effect, because the binding with children
-                // or facets should be restored fully.
-                UIOutput out2 = new UIOutput();
-                out2.setValue("hello2");
-                panel.getChildren().add(out2);
-            }
-            UIOutput out = new UIOutput();
-            out.setValue("hello1");
-            panel.getChildren().add(out);
-            if (!FacesContext.getCurrentInstance().isPostback())
-            {
-                // Store something into the state
-                panel.getAttributes().put("attr1", "value1");
-                panel.getChildren().get(0).getAttributes().put("attr2", "value2");
-            }
-            else
-            {
-                //Try to mess the state, in theory it should not have effect
-                panel.getAttributes().remove("attr1");
-                panel.getChildren().get(0).getAttributes().remove("attr2");
-            }
+            //panel.setTransient(true);
+            panel.setId("formRoot");            
         }
-        return panel;
+        
+         // Clear the existing tree. 
+        panel.getChildren().clear();
+            
+        // Start building the new component tree with formRoot as parent.
+        Random random = new Random() ;
+        int n = random.nextInt(9)+1;
+
+        for(int i = 0; i < n; i++)
+        {
+            UIOutput input = new UIOutput();
+            input.setId("input_"+i);
+            panel.getChildren().add(input);
+        }
+        
+        this.rebuildDone = true;
+    }
+    
+    public void forceRebuild()
+    {
+        rebuildForm();
     }
     
     public void setPanel(UIPanel panel)

Modified: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml?rev=1622093&r1=1622092&r2=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/WEB-INF/testcomponent.taglib.xml Tue Sep  2 19:03:52 2014
@@ -99,5 +99,12 @@
 			<component-type>com.myapp.UIAddSimpleCCVDL</component-type>
 		</component>
 	</tag>
+        
+	<tag>
+		<tag-name>dynamicFormComponent</tag-name>
+		<component>
+			<component-type>com.myapp.UIDynamicFormComponent</component-type>
+		</component>
+	</tag>
 
 </facelet-taglib>
\ No newline at end of file

Copied: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding2.xhtml (from r1587542, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding1.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding2.xhtml?p2=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding2.xhtml&p1=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding1.xhtml&r1=1587542&r2=1622093&rev=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding1.xhtml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/componentBinding2.xhtml Tue Sep  2 19:03:52 2014
@@ -19,8 +19,8 @@
 <h:head>
 </h:head>
 <h:body>
-  <h:panelGroup id="panel" binding="#{componentBindingBean.panel}"/>
   <h:form id="mainForm">
+     <h:panelGroup id="panel" binding="#{componentBindingFormBean.panel}"/>
      <h:commandButton id="postback" value="POSTBACK"/>
   </h:form>
 </h:body>

Copied: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/dynamicForm.xhtml (from r1587542, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/recursive.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/dynamicForm.xhtml?p2=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/dynamicForm.xhtml&p1=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/recursive.xhtml&r1=1587542&r2=1622093&rev=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/recursive.xhtml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/dynamicForm.xhtml Tue Sep  2 19:03:52 2014
@@ -31,7 +31,7 @@
 		
 	<h:form id="mainForm">
 	
-		<test:recursivecomponent id="component"/>
+		<test:dynamicFormComponent id="dynPanel"/>
 		
 		<br/>
 		

Copied: myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page3.xhtml (from r1587542, myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page2.xhtml)
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page3.xhtml?p2=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page3.xhtml&p1=myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page2.xhtml&r1=1587542&r2=1622093&rev=1622093&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page2.xhtml (original)
+++ myfaces/core/trunk/impl/src/test/resources/org/apache/myfaces/view/facelets/pss/acid/page3.xhtml Tue Sep  2 19:03:52 2014
@@ -17,5 +17,8 @@
     xmlns:h="http://java.sun.com/jsf/html"
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:ui="http://java.sun.com/jsf/facelets">
-<h:outputText id="component2" value="Page 2"/>
+<h:outputText id="component1" value="Page 2"/>
+<h:panelGrid id="grid1" columns="1">
+    <h:outputText id="component3" value="Hello Component 3"/>
+</h:panelGrid>
 </ui:composition>