WICKET-6011 keep pageUpdate transient, since the page might get serialized 
before the Ajax update has finished (e.g. from Debugbar)


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/660023c6
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/660023c6
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/660023c6

Branch: refs/heads/lambdas
Commit: 660023c68cea35b72ad5267f7a42e6d9696ca336
Parents: f14e03f
Author: Sven Meier <[email protected]>
Authored: Tue Oct 27 14:48:46 2015 +0100
Committer: Sven Meier <[email protected]>
Committed: Tue Oct 27 14:53:38 2015 +0100

----------------------------------------------------------------------
 .../apache/wicket/page/PartialPageUpdate.java   | 27 ++++++++++++++++----
 1 file changed, 22 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/660023c6/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java 
b/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
index 744473e..9efcafb 100644
--- a/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
+++ b/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
@@ -478,7 +478,7 @@ public abstract class PartialPageUpdate
                // create the htmlheadercontainer if needed
                if (header == null)
                {
-                       header = new PartialHtmlHeaderContainer();
+                       header = new PartialHtmlHeaderContainer(this);
                        page.addOrReplace(header);
                }
 
@@ -513,23 +513,36 @@ public abstract class PartialPageUpdate
        public abstract void setContentType(WebResponse response, String 
encoding);
 
        /**
-        * Header container component partial page updates.
+        * Header container component for partial page updates.
+        * <p>
+        * This container is temporarily injected into the page to provide the
+        * {@link IHeaderResponse} while components are rendered. It is never
+        * rendered itself. 
         *
         * @author Matej Knopp
         */
-       private class PartialHtmlHeaderContainer extends HtmlHeaderContainer
+       private static class PartialHtmlHeaderContainer extends 
HtmlHeaderContainer
        {
                private static final long serialVersionUID = 1L;
 
                /**
+                * Keep transiently, in case the containing page gets 
serialized before
+                * this container is removed again. This happens when DebugBar 
determines
+                * the page size by serializing/deserializing it.
+                */
+               private transient PartialPageUpdate pageUpdate;
+
+               /**
                 * Constructor.
                 *
                 * @param update
                 *      the partial page update
                 */
-               public PartialHtmlHeaderContainer()
+               public PartialHtmlHeaderContainer(PartialPageUpdate pageUpdate)
                {
                        super(HtmlHeaderSectionHandler.HEADER_ID);
+
+                       this.pageUpdate = pageUpdate;
                }
 
                /**
@@ -539,7 +552,11 @@ public abstract class PartialPageUpdate
                @Override
                protected IHeaderResponse newHeaderResponse()
                {
-               return PartialPageUpdate.this.getHeaderResponse();
+                       if (pageUpdate == null) {
+                               throw new IllegalStateException("disconnected 
from pageUpdate after serialization");
+                       }
+
+               return pageUpdate.getHeaderResponse();
                }
        }
 

Reply via email to