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


Reply via email to