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 2010/01/29 02:26:44 UTC

svn commit: r904335 - in /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core: EventHandler.java ViewMetadataHandler.java

Author: lu4242
Date: Fri Jan 29 01:26:43 2010
New Revision: 904335

URL: http://svn.apache.org/viewvc?rev=904335&view=rev
Log:
MYFACES-2516 Allow any child for f:event in the case of a PreRenderViewEvent (Thanks to Bernd Bohmann for provide this patch)

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/EventHandler.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/EventHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/EventHandler.java?rev=904335&r1=904334&r2=904335&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/EventHandler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/EventHandler.java Fri Jan 29 01:26:43 2010
@@ -33,6 +33,7 @@
 import javax.faces.context.FacesContext;
 import javax.faces.event.ComponentSystemEvent;
 import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.event.PreRenderViewEvent;
 import javax.faces.view.facelets.ComponentHandler;
 import javax.faces.view.facelets.FaceletContext;
 import javax.faces.view.facelets.FaceletException;
@@ -105,9 +106,18 @@
         MethodExpression methodExp = listener.getMethodExpression(ctx, void.class, new Class<?>[] {
             ComponentSystemEvent.class });
         
-        // Simply register the event on the component.
-        
-        parent.subscribeToEvent (eventClass, new Listener (methodExp));
+        if (eventClass == PreRenderViewEvent.class)
+        {
+            // ensure ViewRoot for PreRenderViewEvent
+            UIViewRoot viewRoot = ctx.getFacesContext().getViewRoot();
+            viewRoot.subscribeToEvent (eventClass, new Listener (methodExp));
+        }
+        else
+        {
+            // Simply register the event on the component.
+
+            parent.subscribeToEvent (eventClass, new Listener (methodExp));
+        }
     }
     
     /**

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java?rev=904335&r1=904334&r2=904335&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/ViewMetadataHandler.java Fri Jan 29 01:26:43 2010
@@ -66,9 +66,15 @@
                 metadataFacet = ctx.getFacesContext().
                     getApplication().createComponent(UIPanel.COMPONENT_TYPE);
                 metadataFacet.setId(UIViewRoot.METADATA_FACET_NAME);
+                this.nextHandler.apply(ctx, metadataFacet);
+                // ensure ComponentHandler.isNew() is true
                 parent.getFacets().put(UIViewRoot.METADATA_FACET_NAME, metadataFacet);
             }
-            this.nextHandler.apply(ctx, metadataFacet);
+            else
+            {
+                this.nextHandler.apply(ctx, metadataFacet);
+            }
+
         }
     }
 }