Repository: wicket Updated Branches: refs/heads/master 080df220c -> 7a5ba65c1
WICKET-6529 stateless page must no prepare feedbacks before rendering; added AutoCloseable sugar Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7a5ba65c Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7a5ba65c Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7a5ba65c Branch: refs/heads/master Commit: 7a5ba65c1ee8364e5fd749ead5e8836eb0c87bd8 Parents: 080df22 Author: Sven Meier <[email protected]> Authored: Mon Feb 5 15:02:02 2018 +0100 Committer: Sven Meier <[email protected]> Committed: Mon Feb 5 15:08:12 2018 +0100 ---------------------------------------------------------------------- wicket-core/src/main/java/org/apache/wicket/Page.java | 6 ++---- .../core/request/handler/PageAndComponentProvider.java | 11 +++++++++-- .../java/org/apache/wicket/feedback/FeedbackDelay.java | 10 ++++++++-- .../java/org/apache/wicket/page/PartialPageUpdate.java | 7 ++----- .../wicket/stateless/StatelessPageWithFeedbackTest.java | 1 - 5 files changed, 21 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/7a5ba65c/wicket-core/src/main/java/org/apache/wicket/Page.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java b/wicket-core/src/main/java/org/apache/wicket/Page.java index ca8a874..a1f3b29 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Page.java +++ b/wicket-core/src/main/java/org/apache/wicket/Page.java @@ -986,13 +986,11 @@ public abstract class Page extends MarkupContainer { ++renderCount; - FeedbackDelay delay = new FeedbackDelay(getRequestCycle()); - try { + // delay rendering of feedbacks after all other components + try (FeedbackDelay delay = new FeedbackDelay(getRequestCycle())) { beforeRender(); delay.beforeRender(); - } finally { - delay.release(); } markRendering(true); http://git-wip-us.apache.org/repos/asf/wicket/blob/7a5ba65c/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java index 79b8d0d..0638c9b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java @@ -17,6 +17,7 @@ package org.apache.wicket.core.request.handler; import org.apache.wicket.Page; +import org.apache.wicket.feedback.FeedbackDelay; import org.apache.wicket.request.component.IRequestableComponent; import org.apache.wicket.request.component.IRequestablePage; import org.apache.wicket.request.mapper.parameter.PageParameters; @@ -169,8 +170,14 @@ public class PageAndComponentProvider extends PageProvider implements IPageAndCo { Page p = (Page)page; p.internalInitialize(); - p.beforeRender(); - p.markRendering(false); + + // preparation of feedbacks is delayed into the render phase + try (FeedbackDelay delay = new FeedbackDelay(p.getRequestCycle())) { + p.beforeRender(); + p.markRendering(false); + + // note: no invocation of delay.onBeforeRender() + } component = page.get(componentPath); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/7a5ba65c/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackDelay.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackDelay.java b/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackDelay.java index 4d0ef30..8dc43ef 100644 --- a/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackDelay.java +++ b/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackDelay.java @@ -33,7 +33,7 @@ import org.apache.wicket.request.cycle.RequestCycle; * This gives other {@link Component#beforeRender()} the possibility to report feedbacks, * which can then be collected by {@link IFeedback}s afterwards. */ -public class FeedbackDelay implements Serializable +public class FeedbackDelay implements Serializable, AutoCloseable { private static final MetaDataKey<FeedbackDelay> KEY = new MetaDataKey<FeedbackDelay>() { @@ -109,7 +109,13 @@ public class FeedbackDelay implements Serializable } } - public void release() { + /** + * Close any delays. + * <p> + * This does not call {@link #beforeRender()} on the delayed feedbacks. + */ + @Override + public void close() { if (cycle != null) { cycle.setMetaData(KEY, null); cycle = null; http://git-wip-us.apache.org/repos/asf/wicket/blob/7a5ba65c/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 caec116..fa7aa6d 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 @@ -241,9 +241,8 @@ public abstract class PartialPageUpdate List<Component> prepared = new ArrayList<>(markupIdToComponent.size()); - // prepare components - FeedbackDelay delay = new FeedbackDelay(RequestCycle.get()); - try { + // delay preparation of feedbacks after all other components + try (FeedbackDelay delay = new FeedbackDelay(RequestCycle.get())) { for (Component component : markupIdToComponent.values()) { if (!containsAncestorFor(component)) @@ -255,8 +254,6 @@ public abstract class PartialPageUpdate // .. now prepare all postponed feedbacks delay.beforeRender(); - } finally { - delay.release(); } // write components http://git-wip-us.apache.org/repos/asf/wicket/blob/7a5ba65c/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessPageWithFeedbackTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessPageWithFeedbackTest.java b/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessPageWithFeedbackTest.java index 16eeda9..14bfc88 100644 --- a/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessPageWithFeedbackTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessPageWithFeedbackTest.java @@ -46,7 +46,6 @@ public class StatelessPageWithFeedbackTest extends WicketTestCase * After submit, both feedbackmessages (from onInitialize and onSubmit) must be visible */ @Test - @Ignore("WICKET-6529 is not fixed") public void wicket6529() { tester.startPage(StatelessPageWithFeedback.class);
