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