You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2017/04/29 13:08:47 UTC
wicket git commit: WICKET-6361 MarkupContainer#queue doesn't work in
table column
Repository: wicket
Updated Branches:
refs/heads/master 9e42a9548 -> 446003862
WICKET-6361 MarkupContainer#queue doesn't work in table column
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/44600386
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/44600386
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/44600386
Branch: refs/heads/master
Commit: 446003862b96e8c5ff551b26489f2e0751b50db0
Parents: 9e42a95
Author: Andrea Del Bene <ad...@apache.org>
Authored: Sat Apr 29 15:09:12 2017 +0200
Committer: Andrea Del Bene <ad...@apache.org>
Committed: Sat Apr 29 15:09:35 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/wicket/MarkupContainer.java | 54 +++++++-------------
.../wicket/queueing/ComponentQueueingTest.java | 20 ++++++++
2 files changed, 38 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/44600386/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index 5baac8b..57ab1c9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -1002,17 +1002,6 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
}
Page page = findPage();
-
- // if we have a path to page, dequeue any container children.
- if (page != null && child instanceof MarkupContainer)
- {
- MarkupContainer childContainer = (MarkupContainer)child;
- // if we are already dequeueing there is no need to dequeue again
- if (!childContainer.getRequestFlag(RFLAG_CONTAINER_DEQUEING))
- {
- childContainer.dequeue();
- }
- }
if (page != null)
{
@@ -1874,42 +1863,35 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp
}
else
{
- MarkupContainer containerWithQueue = this;
+ MarkupContainer queueRegion = (MarkupContainer)findParent(IQueueRegion.class);
- // check if there are any parent containers that have queued components, up till our
- // queue region
- while (containerWithQueue.isQueueEmpty() &&
- !(containerWithQueue instanceof IQueueRegion))
+ if (queueRegion == null)
{
- containerWithQueue = containerWithQueue.getParent();
- if (containerWithQueue == null)
- {
- // no queued components are available for dequeuing, so we can stop
- return;
- }
- }
-
- // when there are no components to be dequeued, just stop
- if (containerWithQueue.isQueueEmpty())
return;
-
- // get the queue region where we are going to dequeue components in
- MarkupContainer queueRegion = containerWithQueue;
-
- // the container with queued components could be a queue region, if not, find the region
- // to dequeue in
- if (!queueRegion.isQueueRegion())
+ }
+
+ MarkupContainer anchestor = this;
+ boolean hasQueuedChildren = !isQueueEmpty();
+
+ while (!hasQueuedChildren && anchestor != queueRegion)
{
- queueRegion = (MarkupContainer)queueRegion.findParent(IQueueRegion.class);
+ anchestor = anchestor.getParent();
+ hasQueuedChildren = !anchestor.isQueueEmpty();
}
-
- if (queueRegion != null && !queueRegion.getRequestFlag(RFLAG_CONTAINER_DEQUEING))
+
+ if (hasQueuedChildren && !queueRegion.getRequestFlag(RFLAG_CONTAINER_DEQUEING))
{
queueRegion.dequeue();
}
}
}
+ @Override
+ protected void onInitialize()
+ {
+ super.onInitialize();
+ dequeue();
+ }
/**
* @return {@code true} when one or more components are queued
*/
http://git-wip-us.apache.org/repos/asf/wicket/blob/44600386/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java b/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
index e889865..fdce742 100644
--- a/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/queueing/ComponentQueueingTest.java
@@ -66,6 +66,26 @@ public class ComponentQueueingTest extends WicketTestCase
tester.startPage(p);
}
+ /**
+ * https://issues.apache.org/jira/browse/WICKET-6361
+ */
+ @Test
+ public void dequeueComponentsOnInitialization()
+ {
+ TestPage p = new TestPage();
+ p.setPageMarkup("<p wicket:id='a'><p wicket:id='b'><p wicket:id='c'></p></p></p>");
+ MarkupContainer a = new A(), b = new B(), c = new C();
+
+ //components are queued before their nested container is added to the page.
+ //this caused a "Detach called on component...while it had a non-empty queue" before WICKET-6361 was fixed
+ b.queue(c);
+ a.add(b);
+
+ p.add(a);
+
+ tester.startPage(p);
+ }
+
/** {@code [a[b,c]] -> [a[b[c]]] } */
@Test
public void dequeue2()