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(); } }
