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);
+ }
+
}
}
}