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 2012/12/17 23:24:08 UTC

svn commit: r1423194 - in /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets: FaceletCompositionContext.java impl/DefaultFacelet.java impl/FaceletCompositionContextImpl.java

Author: lu4242
Date: Mon Dec 17 22:24:07 2012
New Revision: 1423194

URL: http://svn.apache.org/viewvc?rev=1423194&view=rev
Log:
MYFACES-3665 f:metadata section removed when refresh view and is not included in the template directly

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletCompositionContext.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFacelet.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/FaceletCompositionContextImpl.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletCompositionContext.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletCompositionContext.java?rev=1423194&r1=1423193&r2=1423194&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletCompositionContext.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/FaceletCompositionContext.java Mon Dec 17 22:24:07 2012
@@ -336,6 +336,10 @@ abstract public class FaceletComposition
      *            UIComponent to finalize
      */
     public abstract void finalizeForDeletion(UIComponent component);
+    
+    public void removeComponentForDeletion(UIComponent component)
+    {
+    }
 
     /**
      * Add a method expression as targeted for the provided composite component

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFacelet.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFacelet.java?rev=1423194&r1=1423193&r2=1423194&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFacelet.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFacelet.java Mon Dec 17 22:24:07 2012
@@ -40,6 +40,7 @@ import javax.el.ExpressionFactory;
 import javax.faces.FacesException;
 import javax.faces.application.Resource;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
 import javax.faces.component.UniqueIdVendor;
 import javax.faces.context.FacesContext;
 import javax.faces.view.facelets.FaceletContext;
@@ -177,6 +178,19 @@ final class DefaultFacelet extends Abstr
             this.refresh(parent);
             myFaceletContext.markForDeletion(parent);
             _root.apply(ctx, parent);
+            if (faceletCompositionContextInitialized &&
+                parent instanceof UIViewRoot)
+            {
+                UIComponent metadataFacet = parent.getFacet(UIViewRoot.METADATA_FACET_NAME);
+                if (metadataFacet != null)
+                {
+                    // Ensure metadata facet is removed from deletion, so if by some reason
+                    // is not refreshed, its content will not be removed from the component tree.
+                    // This behavior is preferred, even if the spec suggest to include it using
+                    // a trick with the template client.
+                    myFaceletContext.removeComponentForDeletion(metadataFacet);
+                }
+            }
             myFaceletContext.finalizeForDeletion(parent);
             this.markApplied(parent);
             

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/FaceletCompositionContextImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/FaceletCompositionContextImpl.java?rev=1423194&r1=1423193&r2=1423194&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/FaceletCompositionContextImpl.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/FaceletCompositionContextImpl.java Mon Dec 17 22:24:07 2012
@@ -820,6 +820,32 @@ public class FaceletCompositionContextIm
         }
     }
     
+    @Override
+    public void removeComponentForDeletion(UIComponent component)
+    {
+        String id = (String) component.getAttributes().get(ComponentSupport.MARK_CREATED);
+        if (id != null)
+        {
+            removeComponentForDeletion(id);
+        }
+        else if (id == null
+                 && Boolean.TRUE.equals(component.getAttributes().get(ComponentSupport.FACET_CREATED_UIPANEL_MARKER)))
+        {
+            if (component.getChildCount() > 0)
+            {
+                for (int i = 0, size = component.getChildCount(); i < size; i++)
+                {
+                    UIComponent child = component.getChildren().get(i);
+                    id = (String) child.getAttributes().get(ComponentSupport.MARK_CREATED);
+                    if (id != null)
+                    {
+                        removeComponentForDeletion(id);
+                    }
+                }
+            }
+        }
+    }
+    
     public void finalizeForDeletion(UIComponent component)
     {
         String id = (String) component.getAttributes().get(ComponentSupport.MARK_CREATED);