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 2011/10/24 18:16:03 UTC

svn commit: r1188198 - in /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5: corelib/components/FormInjector.java internal/services/ajax/AjaxResponseRendererImpl.java services/ajax/AjaxResponseRenderer.java

Author: hlship
Date: Mon Oct 24 16:16:03 2011
New Revision: 1188198

URL: http://svn.apache.org/viewvc?rev=1188198&view=rev
Log:
TAP5-1700: Changes to partial markup rendering mean that the critical elementId JSON key is no longer set in the response when injecting content into a Form

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormInjector.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.java

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormInjector.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormInjector.java?rev=1188198&r1=1188197&r2=1188198&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormInjector.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/FormInjector.java Mon Oct 24 16:16:03 2011
@@ -14,8 +14,6 @@
 
 package org.apache.tapestry5.corelib.components;
 
-import java.io.IOException;
-
 import org.apache.tapestry5.*;
 import org.apache.tapestry5.annotations.Environmental;
 import org.apache.tapestry5.annotations.Events;
@@ -23,16 +21,17 @@ import org.apache.tapestry5.annotations.
 import org.apache.tapestry5.annotations.SupportsInformalParameters;
 import org.apache.tapestry5.corelib.data.InsertPosition;
 import org.apache.tapestry5.dom.Element;
-import org.apache.tapestry5.internal.services.PageRenderQueue;
 import org.apache.tapestry5.internal.services.RequestConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.json.JSONObject;
 import org.apache.tapestry5.services.ClientBehaviorSupport;
 import org.apache.tapestry5.services.FormSupport;
-import org.apache.tapestry5.services.PartialMarkupRenderer;
-import org.apache.tapestry5.services.PartialMarkupRendererFilter;
+import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
+import org.apache.tapestry5.services.ajax.JSONCallback;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
+import java.io.IOException;
+
 /**
  * A way to add new content to an existing Form. The FormInjector emulates its tag from the template (or uses a
  * <div>). When triggered, new content is obtained from the application and is injected before or after the
@@ -41,7 +40,7 @@ import org.apache.tapestry5.services.jav
  * On the client side, a new function, trigger(), is added to the element. Invoking this client-side function will
  * trigger the FormInjector; a request is sent to the server, new content is generated, and the new content is placed
  * before or after (per configuration) the existing FormInjector element.
- * 
+ *
  * @tapestrydoc
  */
 @SupportsInformalParameters
@@ -90,14 +89,14 @@ public class FormInjector implements Cli
     @Environmental
     private TrackableComponentEventCallback eventCallback;
 
-    @Inject
-    private PageRenderQueue pageRenderQueue;
-
     private String clientId;
 
     @Inject
     private ComponentResources resources;
 
+    @Inject
+    private AjaxResponseRenderer ajaxResponseRenderer;
+
     private Element clientElement;
 
     String defaultElement()
@@ -147,25 +146,16 @@ public class FormInjector implements Cli
      */
     void onInject(EventContext context) throws IOException
     {
-        resources.triggerContextEvent(EventConstants.ACTION, context, eventCallback);
-
-        if (!eventCallback.isAborted())
-            return;
-
-        // Before rendering, allocate a unique element id and record it into the JSON reply.
-
-        PartialMarkupRendererFilter filter = new PartialMarkupRendererFilter()
+        ajaxResponseRenderer.addCallback(new JSONCallback()
         {
-            public void renderMarkup(MarkupWriter writer, JSONObject reply, PartialMarkupRenderer renderer)
+            public void run(JSONObject reply)
             {
                 clientId = javascriptSupport.allocateClientId(resources);
 
                 reply.put("elementId", clientId);
-
-                renderer.renderMarkup(writer, reply);
             }
-        };
+        });
 
-        pageRenderQueue.addPartialMarkupRendererFilter(filter);
+        resources.triggerContextEvent(EventConstants.ACTION, context, eventCallback);
     }
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java?rev=1188198&r1=1188197&r2=1188198&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/AjaxResponseRendererImpl.java Mon Oct 24 16:16:03 2011
@@ -56,6 +56,8 @@ public class AjaxResponseRendererImpl im
 
     public AjaxResponseRenderer addCallback(final JavaScriptCallback callback)
     {
+        assert callback != null;
+
         addFilter(new PartialMarkupRendererFilter()
         {
             public void renderMarkup(MarkupWriter writer, JSONObject reply, PartialMarkupRenderer renderer)
@@ -69,6 +71,24 @@ public class AjaxResponseRendererImpl im
         return this;
     }
 
+    public AjaxResponseRenderer addCallback(final Runnable callback)
+    {
+        assert callback != null;
+
+        addFilter(new PartialMarkupRendererFilter()
+        {
+            public void renderMarkup(MarkupWriter writer, JSONObject reply, PartialMarkupRenderer renderer)
+            {
+                callback.run();
+
+                renderer.renderMarkup(writer, reply);
+            }
+        });
+
+
+        return this;
+    }
+
     public AjaxResponseRenderer addFilter(PartialMarkupRendererFilter filter)
     {
         assert filter != null;
@@ -80,6 +100,8 @@ public class AjaxResponseRendererImpl im
 
     public AjaxResponseRenderer addCallback(final JSONCallback callback)
     {
+        assert callback != null;
+
         addFilter(new PartialMarkupRendererFilter()
         {
             public void renderMarkup(MarkupWriter writer, JSONObject reply, PartialMarkupRenderer renderer)

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.java?rev=1188198&r1=1188197&r2=1188198&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.java Mon Oct 24 16:16:03 2011
@@ -57,6 +57,15 @@ public interface AjaxResponseRenderer
     AjaxResponseRenderer addCallback(JavaScriptCallback callback);
 
     /**
+     * Queues a callback to execute during the partial markup render. . The callback is {@linkplain #addFilter(org.apache.tapestry5.services.PartialMarkupRendererFilter) added as a filter}; the
+     * callback is invoked before the rest of the rendering pipeline is invoked.
+     *
+     * @param callback object to be invoked
+     * @return this renderer, for a fluid interface
+     */
+    AjaxResponseRenderer addCallback(Runnable callback);
+
+    /**
      * Adds a rendering filter.  Dynamically added filters are only in place during the handling of the current request, and come after any filters
      * contributed to the {@link org.apache.tapestry5.services.PartialMarkupRenderer} service.
      *
@@ -67,6 +76,7 @@ public interface AjaxResponseRenderer
     /**
      * Queues a callback to execute during the partial markup render. The callback is {@linkplain #addFilter(org.apache.tapestry5.services.PartialMarkupRendererFilter) added as a filter};
      * the callback is invoked before the rest of the rendering pipeline is invoked.
+     *
      * @param callback object o be invoked
      * @return this renderer, for a fluid interface
      */