Repository: wicket Updated Branches: refs/heads/master 5e49b1669 -> 860668521
WICKET-5964 Queuing a component within an enclosure Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/86066852 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/86066852 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/86066852 Branch: refs/heads/master Commit: 860668521f1d250038cd233d5dfe63c740e1fc19 Parents: 5e49b16 Author: Andrea Del Bene <[email protected]> Authored: Wed Aug 12 14:30:26 2015 +0200 Committer: Andrea Del Bene <[email protected]> Committed: Wed Aug 12 14:31:00 2015 +0200 ---------------------------------------------------------------------- .../wicket/markup/html/internal/Enclosure.java | 46 +++++++++++++++++++- ...eueingTransparentWebMarkupContainerTest.java | 5 +++ .../TransparentContainerQueuePage.html | 8 ++-- 3 files changed, 55 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java index 49d55c3..882a3ba 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java @@ -16,12 +16,17 @@ */ package org.apache.wicket.markup.html.internal; +import java.util.Iterator; + import org.apache.wicket.Component; +import org.apache.wicket.DequeueContext; import org.apache.wicket.MarkupContainer; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.IMarkupFragment; import org.apache.wicket.markup.MarkupException; import org.apache.wicket.markup.MarkupStream; +import org.apache.wicket.markup.html.TransparentWebMarkupContainer; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.EnclosureContainer; import org.apache.wicket.markup.parser.filter.EnclosureHandler; @@ -125,7 +130,7 @@ public class Enclosure extends WebMarkupContainer implements IComponentResolver if (childComponent == null) { // try to find child when queued - childComponent = get(childId); + childComponent = resolveChild(this); } if (childComponent == null) { @@ -134,6 +139,33 @@ public class Enclosure extends WebMarkupContainer implements IComponentResolver } return childComponent; } + + /** + * Searches for the controlling child component looking also + * through transparent components. + * + * @param container + * the current container + * @return the controlling child component, null if no one is found + */ + private Component resolveChild(MarkupContainer container) + { + Component childController = container.get(childId); + + Iterator<Component> children = container.iterator(); + + while (children.hasNext() && childController == null) + { + Component transparentChild = children.next(); + + if(transparentChild instanceof TransparentWebMarkupContainer) + { + childController = resolveChild((MarkupContainer)transparentChild); + } + } + + return childController; + } @Override public boolean isVisible() @@ -274,4 +306,16 @@ public class Enclosure extends WebMarkupContainer implements IComponentResolver "Programming error: childComponent == enclose component; endless loop"); } } + + @Override + public DequeueContext newDequeueContext() + { + IMarkupFragment markup = getMarkupSourcingStrategy().getMarkup(this, null); + if (markup == null) + { + return null; + } + + return new DequeueContext(markup, this, true); + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java index d1a3d08..6ac7d4a 100644 --- a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/DequeueingTransparentWebMarkupContainerTest.java @@ -45,6 +45,11 @@ public class DequeueingTransparentWebMarkupContainerTest extends WicketTestCase * * Transparent component inside page body must allow * queued children components. + * + * + * https://issues.apache.org/jira/browse/WICKET-5964 + * + * Queuing a component within an enclosure */ @Test public void queuedComponentsInsideTransparentContainer() http://git-wip-us.apache.org/repos/asf/wicket/blob/86066852/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html index 06e8f3f..ce963d9 100644 --- a/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html +++ b/wicket-core/src/test/java/org/apache/wicket/queueing/transparentresolvers/TransparentContainerQueuePage.html @@ -5,8 +5,10 @@ <title>Insert title here</title> </head> <body> - <a href="ref/transparentContainer.html"> - <span wicket:id="queuedComponent"></span> - </a> + <wicket:enclosure child="queuedComponent"> + <a href="ref/transparentContainer.html"> + <span wicket:id="queuedComponent"></span> + </a> + </wicket:enclosure> </body> </html> \ No newline at end of file
