Author: hlship
Date: Fri Oct 15 18:38:51 2010
New Revision: 1023065
URL: http://svn.apache.org/viewvc?rev=1023065&view=rev
Log:
TAP5-1309: When using a MultiZoneUpdate, Tapestry will clear the referenced zone
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueue.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueueImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupRendererTerminator.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderCommandComponentEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/MultiZoneUpdateEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/SingleZonePartialRendererFilter.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxComponentInstanceEventResultProcessor.java
Fri Oct 15 18:38:51 2010
@@ -1,10 +1,10 @@
-// Copyright 2007, 2008 The Apache Software Foundation
+// Copyright 2007, 2008, 2010 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,16 +24,18 @@ import org.apache.tapestry5.services.Com
import java.io.IOException;
/**
- * Performs a partial page render based on a root component.
+ * Performs a partial page render based on a root component. If the component
is actually a page,
+ * it will send an JSON reponse to rediret to the page.
*/
+...@suppresswarnings("all")
public class AjaxComponentInstanceEventResultProcessor implements
ComponentEventResultProcessor<Component>
{
private final RequestPageCache cache;
private final ComponentEventResultProcessor masterProcessor;
- public AjaxComponentInstanceEventResultProcessor(RequestPageCache cache,
- @Ajax
ComponentEventResultProcessor masterProcessor)
+ public AjaxComponentInstanceEventResultProcessor(RequestPageCache cache,
@Ajax
+ ComponentEventResultProcessor masterProcessor)
{
this.cache = cache;
this.masterProcessor = masterProcessor;
@@ -55,7 +57,9 @@ public class AjaxComponentInstanceEventR
return;
}
- // Otherwise, a component within a page.
+ // Otherwise, a component within a page. Components are transformed to
implement RenderCommand, but if we just
+ // pass the component itself to the master processor, we'll get in a
loop, so we instead
+ // pass the ComponentPageElement (which implements RenderCommand as
well).
Page page = cache.get(pageName);
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxLinkComponentEventResultProcessor.java
Fri Oct 15 18:38:51 2010
@@ -1,4 +1,4 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2010 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import java.io.IOException;
/**
* Handles {...@link org.apache.tapestry5.Link} result types by building a
JSON response with key "redirectURL".
*/
+...@suppresswarnings("all")
public class AjaxLinkComponentEventResultProcessor implements
ComponentEventResultProcessor<Link>
{
private final ComponentEventResultProcessor masterProcessor;
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageClassComponentEventResultProcessor.java
Fri Oct 15 18:38:51 2010
@@ -1,4 +1,4 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2010 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@ import java.io.IOException;
* @see org.apache.tapestry5.services.ComponentSource
* @see
org.apache.tapestry5.internal.services.AjaxPageNameComponentEventResultProcessor
*/
+...@suppresswarnings("all")
public class AjaxPageClassComponentEventResultProcessor implements
ComponentEventResultProcessor<Class>
{
private final ComponentSource componentSource;
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AjaxPageNameComponentEventResultProcessor.java
Fri Oct 15 18:38:51 2010
@@ -1,10 +1,10 @@
-// Copyright 2008, 2009 The Apache Software Foundation
+// Copyright 2008, 2009 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -23,27 +23,29 @@ import java.io.IOException;
/**
* A {...@link org.apache.tapestry5.services.ComponentEventResultProcessor},
used for Ajax requests, for a String value
* that is interpreted as a logical page name.
- *
+ *
* @see
org.apache.tapestry5.internal.services.PageNameComponentEventResultProcessor
*/
+...@suppresswarnings("all")
public class AjaxPageNameComponentEventResultProcessor implements
ComponentEventResultProcessor<String>
{
private final ComponentEventResultProcessor masterProcessor;
private final LinkSource linkSource;
- public AjaxPageNameComponentEventResultProcessor(@Ajax
ComponentEventResultProcessor masterProcessor,
- LinkSource linkSource)
+ public AjaxPageNameComponentEventResultProcessor(@Ajax
+ ComponentEventResultProcessor masterProcessor, LinkSource linkSource)
{
this.masterProcessor = masterProcessor;
this.linkSource = linkSource;
}
/**
- * Obtains a page render {...@link org.apache.tapestry5.Link} for the
named, then builds a JSON reponse for the
+ * Obtains a page render {...@link org.apache.tapestry5.Link} for the
named, then builds a JSON response for the
* client.
- *
- * @param value page name
+ *
+ * @param value
+ * page name
* @throws IOException
*/
public void processResultValue(String value) throws IOException
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueue.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueue.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueue.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueue.java
Fri Oct 15 18:38:51 2010
@@ -4,7 +4,7 @@
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://www.apache.org/licenses/LICENSE-2.0
+// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -19,7 +19,7 @@ import org.apache.tapestry5.internal.str
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.runtime.RenderCommand;
import org.apache.tapestry5.services.PartialMarkupRendererFilter;
-
+import org.apache.tapestry5.services.ajax.MultiZoneUpdateEventResultProcessor;
/**
* A wrapper around {...@link org.apache.tapestry5.runtime.RenderQueue}, but
referencable as a (per-thread) service. This
@@ -49,9 +49,10 @@ public interface PageRenderQueue
void initializeForPartialPageRender(RenderCommand rootCommand);
/**
- * Obtains the value previously supplied to {...@link
#initializeForPartialPageRender(org.apache.tapestry5.runtime.RenderCommand)}.
+ * Obtains the value previously supplied to
+ * {...@link
#initializeForPartialPageRender(org.apache.tapestry5.runtime.RenderCommand)}.
* This allows the "natural" renderer to be substituted or otherwise
manipulated.
- *
+ *
* @return the root renderer
*/
RenderCommand getRootRenderCommand();
@@ -63,30 +64,44 @@ public interface PageRenderQueue
boolean isPartialRenderInitialized();
/**
+ * Forces the partialRenderInitialized flag to true, even if there isn't a
root render command.
+ * This is used by the {...@link MultiZoneUpdateEventResultProcessor}
which doesn't add a render command
+ * until after rendering starts (care-of a stack of filters).
+ *
+ * @since 5.2.2
+ */
+ void forcePartialRenderInitialized();
+
+ /**
* Render to the write, as setup by the initialize method.
- *
- * @param writer to write markup to
+ *
+ * @param writer
+ * to write markup to
*/
void render(MarkupWriter writer);
/**
- * Performs a partial markup render, as configured via {...@link
#initializeForPartialPageRender(org.apache.tapestry5.runtime.RenderCommand)}.
- *
- * @param writer to which markup should be written
- * @param reply JSONObject which will contain the partial response
+ * Performs a partial markup render, as configured via
+ * {...@link
#initializeForPartialPageRender(org.apache.tapestry5.runtime.RenderCommand)}.
+ *
+ * @param writer
+ * to which markup should be written
+ * @param reply
+ * JSONObject which will contain the partial response
*/
void renderPartial(MarkupWriter writer, JSONObject reply);
/**
- * Adds an optional filter to the rendering. Optional filters are
<em>temporary</em>, used just during the current
- * partial render (as opposed to filters contributed to the {...@link
org.apache.tapestry5.services.PartialMarkupRenderer}
- * service which are permanent, shared and stateless.
+ * Adds an optional filter to the rendering. Optional filters are
<em>temporary</em>, used just during the current
+ * partial render (as opposed to filters contributed to the
+ * {...@link org.apache.tapestry5.services.PartialMarkupRenderer} service
which are permanent, shared and stateless.
* <p/>
* Filters are added to the <em>end</em> of the pipeline (after all
permanent contributions).
* <p/>
* Filters will be executed in the order in which they are added.
- *
- * @param filter to add to the pipeline
+ *
+ * @param filter
+ * to add to the pipeline
*/
void addPartialMarkupRendererFilter(PartialMarkupRendererFilter filter);
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueueImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueueImpl.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueueImpl.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageRenderQueueImpl.java
Fri Oct 15 18:38:51 2010
@@ -41,6 +41,8 @@ public class PageRenderQueueImpl impleme
private RenderCommand rootCommand;
+ private boolean partialRenderInitialized;
+
private final Stack<PartialMarkupRendererFilter> filters =
CollectionFactory.newStack();
private static class Bridge implements PartialMarkupRenderer
@@ -80,16 +82,24 @@ public class PageRenderQueueImpl impleme
public boolean isPartialRenderInitialized()
{
- return rootCommand != null;
+ return partialRenderInitialized;
+ }
+
+ public void forcePartialRenderInitialized()
+ {
+ partialRenderInitialized = true;
}
public void initializeForPartialPageRender(RenderCommand rootCommand)
{
assert rootCommand != null;
+
if (page == null)
throw new IllegalStateException("Page must be specified before
root render command.");
this.rootCommand = rootCommand;
+
+ partialRenderInitialized = true;
}
public RenderCommand getRootRenderCommand()
@@ -120,6 +130,7 @@ public class PageRenderQueueImpl impleme
public void addPartialMarkupRendererFilter(PartialMarkupRendererFilter
filter)
{
assert filter != null;
+
filters.push(filter);
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupRendererTerminator.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupRendererTerminator.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupRendererTerminator.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupRendererTerminator.java
Fri Oct 15 18:38:51 2010
@@ -1,4 +1,4 @@
-// Copyright 2009 Apache Software Foundation
+// Copyright 2009, 2010 Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
package org.apache.tapestry5.internal.services;
import org.apache.tapestry5.MarkupWriter;
-import org.apache.tapestry5.dom.Element;
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.services.PartialMarkupRenderer;
@@ -37,17 +36,14 @@ public class PartialMarkupRendererTermin
public void renderMarkup(MarkupWriter writer, JSONObject reply)
{
- // The partial will quite often contain multiple elements (or just a
block of plain text),
- // so those must be enclosed in a root element.
+ // Ensure that whatever renders will do so inside a root element.
+ // Omitting this causes NPEs when rendering individual zones
+ // of a MultiZoneUpdate
- Element root = writer.element("ajax-partial");
+ writer.element("partial-render-root-element");
renderQueue.renderPartial(writer, reply);
writer.end();
-
- String content = root.getChildMarkup().trim();
-
- reply.put("content", content);
}
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderCommandComponentEventResultProcessor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderCommandComponentEventResultProcessor.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderCommandComponentEventResultProcessor.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RenderCommandComponentEventResultProcessor.java
Fri Oct 15 18:38:51 2010
@@ -14,13 +14,16 @@
package org.apache.tapestry5.internal.services;
+import java.io.IOException;
+
import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.dom.Element;
import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateController;
+import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.runtime.RenderCommand;
-import org.apache.tapestry5.runtime.RenderQueue;
import org.apache.tapestry5.services.ComponentEventResultProcessor;
-
-import java.io.IOException;
+import org.apache.tapestry5.services.PartialMarkupRenderer;
+import org.apache.tapestry5.services.PartialMarkupRendererFilter;
/**
* Processor for objects that implement {...@link RenderCommand} (such as
@@ -28,28 +31,13 @@ import java.io.IOException;
*
* @see AjaxPartialResponseRenderer#renderPartialPageMarkup()
*/
-public class RenderCommandComponentEventResultProcessor implements
ComponentEventResultProcessor<RenderCommand>
+public class RenderCommandComponentEventResultProcessor implements
ComponentEventResultProcessor<RenderCommand>,
+ PartialMarkupRendererFilter
{
private final PageRenderQueue pageRenderQueue;
private final AjaxFormUpdateController ajaxFormUpdateController;
- private final RenderCommand setup = new RenderCommand()
- {
- public void render(MarkupWriter writer, RenderQueue queue)
- {
- ajaxFormUpdateController.setupBeforePartialZoneRender(writer);
- }
- };
-
- private final RenderCommand cleanup = new RenderCommand()
- {
- public void render(MarkupWriter writer, RenderQueue queue)
- {
- ajaxFormUpdateController.cleanupAfterPartialZoneRender();
- }
- };
-
public RenderCommandComponentEventResultProcessor(PageRenderQueue
pageRenderQueue,
AjaxFormUpdateController ajaxFormUpdateController)
{
@@ -59,16 +47,35 @@ public class RenderCommandComponentEvent
public void processResultValue(final RenderCommand value) throws
IOException
{
- RenderCommand wrapper = new RenderCommand()
- {
- public void render(MarkupWriter writer, RenderQueue queue)
- {
- queue.push(cleanup);
- queue.push(value);
- queue.push(setup);
- }
- };
+ pageRenderQueue.addPartialMarkupRendererFilter(this);
+ pageRenderQueue.initializeForPartialPageRender(value);
+ }
+
+ /**
+ * As a filter, this class does three things:
+ * <ul>
+ * <li>It creates an outer element to capture the partial page content
that will be rendered</li>
+ * <li>It does setup and cleanup with the {...@link
AjaxFormUpdateController}</li>
+ * <li>It extracts the child markup and stuff it into the reply's
"content" property.</li>
+ * </ul>
+ */
+ public void renderMarkup(MarkupWriter writer, JSONObject reply,
PartialMarkupRenderer renderer)
+ {
+ // The partial will quite often contain multiple elements (or just a
block of plain text),
+ // so those must be enclosed in a root element.
+
+ Element root = writer.element("ajax-partial");
+
+ ajaxFormUpdateController.setupBeforePartialZoneRender(writer);
+
+ renderer.renderMarkup(writer, reply);
+
+ ajaxFormUpdateController.cleanupAfterPartialZoneRender();
+
+ writer.end();
+
+ String content = root.getChildMarkup().trim();
- pageRenderQueue.initializeForPartialPageRender(wrapper);
+ reply.put("content", content);
}
}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
Fri Oct 15 18:38:51 2010
@@ -1818,8 +1818,14 @@ public final class TapestryModule
* <dt>{...@link org.apache.tapestry5.ajax.MultiZoneUpdate}</dt>
* <dd>Sends a single JSON response to update the content of multiple zones
* </dl>
- */
- public static void contributeAjaxComponentEventResultProcessor(
+ * <p>
+ * In most cases, when you want to support a new type, you should convert
it to one of the built-in supported types
+ * (such as {...@link RenderCommand}. You can then inject the master
AjaxComponentEventResultProcessor (use the
+ * {...@link Ajax} marker annotation) and delegate to it.
+ */
+ @Contribute(ComponentEventResultProcessor.class)
+ @Ajax
+ public static void provideBaseAjaxComponentEventResultProcessors(
MappedConfiguration<Class, ComponentEventResultProcessor>
configuration)
{
configuration.addInstance(RenderCommand.class,
RenderCommandComponentEventResultProcessor.class);
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/MultiZoneUpdateEventResultProcessor.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/MultiZoneUpdateEventResultProcessor.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/MultiZoneUpdateEventResultProcessor.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/MultiZoneUpdateEventResultProcessor.java
Fri Oct 15 18:38:51 2010
@@ -14,19 +14,17 @@
package org.apache.tapestry5.services.ajax;
-import org.apache.tapestry5.MarkupWriter;
+import java.io.IOException;
+import java.util.Map;
+
import org.apache.tapestry5.ajax.MultiZoneUpdate;
import org.apache.tapestry5.internal.services.PageRenderQueue;
import org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateController;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.services.TypeCoercer;
import org.apache.tapestry5.runtime.RenderCommand;
-import org.apache.tapestry5.runtime.RenderQueue;
import org.apache.tapestry5.services.ComponentEventResultProcessor;
-import java.io.IOException;
-import java.util.Map;
-
/**
* Handler for {...@link org.apache.tapestry5.ajax.MultiZoneUpdate} responses
from a component event handler method. Works
* by adding {...@link
org.apache.tapestry5.services.ajax.SingleZonePartialRendererFilter}s for each
zone to the
@@ -56,14 +54,7 @@ public class MultiZoneUpdateEventResultP
public void processResultValue(final MultiZoneUpdate value) throws
IOException
{
- // There has to be at least a single command in the queue to force a
render.
- queue.initializeForPartialPageRender(new RenderCommand()
- {
- public void render(MarkupWriter writer, RenderQueue queue)
- {
- }
- });
-
+ queue.forcePartialRenderInitialized();
queue.addPartialMarkupRendererFilter(new SetupZonesFilter());
Map<String, Object> map = value.getZoneToRenderMap();
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/SingleZonePartialRendererFilter.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/SingleZonePartialRendererFilter.java?rev=1023065&r1=1023064&r2=1023065&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/SingleZonePartialRendererFilter.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/ajax/SingleZonePartialRendererFilter.java
Fri Oct 15 18:38:51 2010
@@ -89,8 +89,13 @@ public class SingleZonePartialRendererFi
RenderCommand existing = queue.getRootRenderCommand();
- queue.initializeForPartialPageRender(new
CombinedRenderCommand(existing, forZone));
+ queue.initializeForPartialPageRender(mergeRenderCommands(existing,
forZone));
renderer.renderMarkup(writer, reply);
}
+
+ private RenderCommand mergeRenderCommands(RenderCommand existingCommand,
RenderCommand newCommand)
+ {
+ return existingCommand == null ? newCommand : new
CombinedRenderCommand(existingCommand, newCommand);
+ }
}