Apply TAP5-1100 to 5.1.0.8 (see TAP5-733)
git-svn-id: https://svn.apache.org/repos/asf/tapestry/tapestry5/branches/5.1.0.x-dev@992952 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
index 1b1b4bc..a94a0eb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
@@ -567,6 +567,9 @@
private void initializeRenderPhases()
{
+ if (renderPhasesInitalized)
+ return;
+
setupRenderPhase = new SetupRenderPhase();
beginRenderPhase = new BeginRenderPhase();
beforeRenderTemplatePhase = new BeforeRenderTemplatePhase();
@@ -799,6 +802,11 @@
public void enqueueBeforeRenderBody(RenderQueue queue)
{
+ // TAP5-1100: In certain Ajax cases, a component may be asked to render its body
+ // that has never rendered itself (and thus, never called initializeRenderPhases). Subtle.
+
+ initializeRenderPhases();
+
// If no body, then no beforeRenderBody or afterRenderBody
if (bodyBlock != null)
@@ -976,8 +984,7 @@
// We assume that by the time we start to render, the structure (i.e., mixins) is nailed down.
// We could add a lock, but that seems wasteful.
- if (!renderPhasesInitalized)
- initializeRenderPhases();
+ initializeRenderPhases();
// TODO: An error if the render flag is already set (recursive rendering not
// allowed or advisable).