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).