You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2008/08/27 03:47:20 UTC

svn commit: r689331 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java

Author: hlship
Date: Tue Aug 26 18:47:20 2008
New Revision: 689331

URL: http://svn.apache.org/viewvc?rev=689331&view=rev
Log:
TAPESTRY-2619: Event Handler adds a new JSONObject to my JSONObject return

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java?rev=689331&r1=689330&r2=689331&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentEventRequestHandler.java Tue Aug 26 18:47:20 2008
@@ -19,6 +19,7 @@
 import org.apache.tapestry5.internal.InternalConstants;
 import org.apache.tapestry5.internal.structure.ComponentPageElement;
 import org.apache.tapestry5.internal.structure.Page;
+import org.apache.tapestry5.internal.util.Holder;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.*;
 
@@ -62,8 +63,20 @@
     {
         Page activePage = cache.get(parameters.getActivePageName());
 
-        ComponentResultProcessorWrapper callback = new ComponentResultProcessorWrapper(resultProcessor);
+        final Holder<Boolean> resultProcessorInvoked = Holder.create();
+        resultProcessorInvoked.put(false);
 
+        ComponentEventResultProcessor interceptor = new ComponentEventResultProcessor()
+        {
+            public void processResultValue(Object value) throws IOException
+            {
+                resultProcessorInvoked.put(true);
+
+                resultProcessor.processResultValue(value);
+            }
+        };
+
+        ComponentResultProcessorWrapper callback = new ComponentResultProcessorWrapper(interceptor);
 
         activePage.getRootElement().triggerContextEvent(EventConstants.ACTIVATE,
                                                         parameters.getPageActivationContext(), callback);
@@ -86,8 +99,9 @@
 
         // In many cases, the triggered element is a Form that needs to be able to
         // pass its event handler return values to the correct result processor.
+        // This is certainly the case for forms.
 
-        environment.push(ComponentEventResultProcessor.class, resultProcessor);
+        environment.push(ComponentEventResultProcessor.class, interceptor);
 
         element.triggerContextEvent(parameters.getEventType(), parameters.getEventContext(), callback);
 
@@ -99,13 +113,15 @@
             return;
         }
 
-        if (callback.isAborted()) return;
+        // If  some other form of return value that's not a partial page render was send through to the
+        // Ajax ComponentEventResultProcessor, then there's nothing more to do.
+
+        if (resultProcessorInvoked.get()) return;
 
         // Send an empty JSON reply if no value was returned from the component event handler method.
 
         JSONObject reply = new JSONObject();
 
         resultProcessor.processResultValue(reply);
-
     }
 }