You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by cj...@apache.org on 2009/12/14 16:59:21 UTC

svn commit: r890386 - in /myfaces/core/trunk: api/src/main/java/javax/faces/component/UIComponentBase.java impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/AjaxHandler.java

Author: cjhoward
Date: Mon Dec 14 15:59:20 2009
New Revision: 890386

URL: http://svn.apache.org/viewvc?rev=890386&view=rev
Log:
MYFACES-2458 - Ajax listeners not getting stored and called correctly.

Modified:
    myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/AjaxHandler.java

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java?rev=890386&r1=890385&r2=890386&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java Mon Dec 14 15:59:20 2009
@@ -322,7 +322,15 @@
             throw new NullPointerException("event");
         try
         {
-
+            if (event instanceof BehaviorEvent && event.getComponent() == this)
+            {
+                Behavior behavior = ((BehaviorEvent) event).getBehavior();
+                if (behavior instanceof ClientBehavior)
+                {
+                    behavior.broadcast((BehaviorEvent) event);
+                }
+            }
+            
             if (_facesListeners == null)
                 return;
             for (Iterator<FacesListener> it = _facesListeners.iterator(); it.hasNext();)
@@ -333,14 +341,6 @@
                     event.processListener(facesListener);
                 }
             }
-            if (event instanceof BehaviorEvent && event.getComponent() == this)
-            {
-                Behavior behavior = ((BehaviorEvent) event).getBehavior();
-                if (behavior instanceof ClientBehavior)
-                {
-                    behavior.broadcast((BehaviorEvent) event);
-                }
-            }
         }
         catch (Exception ex)
         {

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/AjaxHandler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/AjaxHandler.java?rev=890386&r1=890385&r2=890386&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/AjaxHandler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/core/AjaxHandler.java Mon Dec 14 15:59:20 2009
@@ -24,6 +24,7 @@
 import java.util.Map;
 
 import javax.el.MethodExpression;
+import javax.faces.component.StateHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UniqueIdVendor;
 import javax.faces.component.behavior.AjaxBehavior;
@@ -424,16 +425,18 @@
     }
 
     /**
-     * Wraps a method expression in a AjaxBehaviorListener 
-     * TODO: This instance should be StateHolder or Serializable,
-     * since ClientBehaviorBase implements PartialStateHolder
-     *
+     * Wraps a method expression in a AjaxBehaviorListener
      */
-    private final static class AjaxBehaviorListenerImpl implements
-            AjaxBehaviorListener
+    public final static class AjaxBehaviorListenerImpl implements
+            AjaxBehaviorListener, StateHolder
     {
-        private final MethodExpression _expr;
-
+        private MethodExpression _expr;
+        private boolean _transient;
+        
+        public AjaxBehaviorListenerImpl ()
+        {
+        }
+        
         public AjaxBehaviorListenerImpl(MethodExpression expr)
         {
             _expr = expr;
@@ -445,5 +448,24 @@
             _expr.invoke(FacesContext.getCurrentInstance().getELContext(),
                     new Object[] { event });
         }
+
+        public boolean isTransient()
+        {
+            return _transient;
+        }
+
+        public void restoreState(FacesContext context, Object state)
+        {
+            _expr = (MethodExpression) state;
+        }
+
+        public Object saveState(FacesContext context) {
+            return _expr;
+        }
+
+        public void setTransient(boolean newTransientValue)
+        {
+            _transient = newTransientValue;
+        }
     }
 }