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/15 05:58:30 UTC

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

Author: lu4242
Date: Fri Jan 15 04:58:30 2010
New Revision: 899526

URL: http://svn.apache.org/viewvc?rev=899526&view=rev
Log:
MYFACES-2473 Make listeners added by tag handlers transient

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/EventHandler.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=899526&r1=899525&r2=899526&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 15 04:58:30 2010
@@ -19,6 +19,7 @@
 package org.apache.myfaces.view.facelets.tag.jsf.core;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -27,11 +28,11 @@
 import javax.el.MethodExpression;
 import javax.el.ValueExpression;
 import javax.faces.FacesException;
-import javax.faces.component.StateHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.event.ComponentSystemEvent;
 import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.view.facelets.ComponentHandler;
 import javax.faces.view.facelets.FaceletContext;
 import javax.faces.view.facelets.FaceletException;
 import javax.faces.view.facelets.TagAttribute;
@@ -88,13 +89,18 @@
     
     public void apply (FaceletContext ctx, UIComponent parent) throws ELException, FacesException, FaceletException, IOException
     {
+        //Apply only if we are creating a new component
+        if (!ComponentHandler.isNew(parent))
+        {
+            return;
+        }
         Class<? extends ComponentSystemEvent> eventClass = getEventClass (ctx);
         MethodExpression methodExp = listener.getMethodExpression(ctx, void.class, new Class<?>[] {
             ComponentSystemEvent.class });
         
         // Simply register the event on the component.
         
-        parent.subscribeToEvent (eventClass, new Listener (ctx.getFacesContext().getELContext(), methodExp));
+        parent.subscribeToEvent (eventClass, new Listener (methodExp));
     }
     
     /**
@@ -172,40 +178,26 @@
         return (Class<? extends ComponentSystemEvent>) eventClass;
     }
     
-    private class Listener implements ComponentSystemEventListener, StateHolder {
-        private ELContext elContext;
+    private class Listener implements ComponentSystemEventListener, Serializable {
+
+        private static final long serialVersionUID = 7318240026355007052L;
+        
         private MethodExpression methodExp;
         
-        private Listener (ELContext elContext, MethodExpression methodExp)
+        public Listener()
+        {
+            super();
+        }
+
+        private Listener (MethodExpression methodExp)
         {
-            this.elContext = elContext;
             this.methodExp = methodExp;
         }
         
         public void processEvent (ComponentSystemEvent event)
         {
+            ELContext elContext = FacesContext.getCurrentInstance().getELContext();
             this.methodExp.invoke(elContext, new Object[] { event });
         }
-
-        public Object saveState(FacesContext context)
-        {
-            return null;
-        }
-
-        public void restoreState(FacesContext context, Object state)
-        {
-            // no-op as listener is transient
-        }
-
-        public boolean isTransient()
-        {
-            return true;
-        }
-
-        public void setTransient(boolean newTransientValue)
-        {
-            // no-op as listener is transient
-        }
-
     }
 }