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
*/