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

Reply via email to