WICKET-6088 Problem with queued components and setting the model
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a04959e9 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a04959e9 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a04959e9 Branch: refs/heads/lambdas Commit: a04959e974b3a3bf915b7614c532fd9a70d0e16e Parents: 21c18df Author: Andrea Del Bene <[email protected]> Authored: Thu Feb 18 11:16:23 2016 +0100 Committer: Andrea Del Bene <[email protected]> Committed: Thu Feb 18 12:05:18 2016 +0100 ---------------------------------------------------------------------- .../java/org/apache/wicket/MarkupContainer.java | 46 +++++--------------- .../wicket/markup/html/border/Border.java | 2 +- .../wicket/markup/html/internal/Enclosure.java | 14 ------ .../wicket/queueing/ComponentQueueingTest.java | 34 +++++++++++++++ 4 files changed, 45 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/a04959e9/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 1cb41aa..7a5210b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java @@ -28,6 +28,7 @@ import java.util.Map; import org.apache.commons.collections4.map.LinkedMap; import org.apache.wicket.core.util.string.ComponentStrings; import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.ComponentTag.IAutoComponentFactory; import org.apache.wicket.markup.IMarkupFragment; import org.apache.wicket.markup.Markup; import org.apache.wicket.markup.MarkupElement; @@ -1598,39 +1599,6 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp renderComponentTagBody(markupStream, openTag); } - @Override - protected void onInitialize() - { - super.onInitialize(); - dequeueAutoComponents(); - } - - private void dequeueAutoComponents() - { - // dequeue auto components - DequeueContext context = newDequeueContext(); - if (context != null && context.peekTag() != null) - { - for (ComponentTag tag = context.takeTag(); tag != null; tag = context.takeTag()) - { - ComponentTag.IAutoComponentFactory autoComponentFactory = tag - .getAutoComponentFactory(); - if (autoComponentFactory != null) - { - Component autoComponent = autoComponentFactory.newComponent(this, tag); - addDequeuedComponent(autoComponent, tag); - } - - // Every component is responsible just for its own auto components - // so skip to the close tag. - if (tag.isOpen() && !tag.hasNoCloseTag()) - { - context.skipToCloseTag(); - } - } - } - } - /** * @see org.apache.wicket.Component#onRender() */ @@ -2036,13 +2004,20 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp // the container does not yet have a child with this id, see if we can // dequeue child = dequeue.findComponentToDequeue(tag); - + + //if tag has an autocomponent factory let's use it + if (child == null && tag.getAutoComponentFactory() != null) + { + IAutoComponentFactory autoComponentFactory = tag.getAutoComponentFactory(); + child = autoComponentFactory.newComponent(this, tag); + } + if (child != null) { addDequeuedComponent(child, tag); } } - + if (tag.isOpen() && !tag.hasNoCloseTag()) { dequeueChild(child, tag, dequeue); @@ -2100,7 +2075,6 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp public DequeueContext newDequeueContext() { IMarkupFragment markup = getRegionMarkup(); - if (markup == null) { return null; http://git-wip-us.apache.org/repos/asf/wicket/blob/a04959e9/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java index 42ac16f..63da8f3 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/border/Border.java @@ -588,7 +588,7 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes @Override public DequeueContext newDequeueContext() { - Border border=findParent(Border.class); + Border border = findParent(Border.class); IMarkupFragment fragment = border.getMarkup(); if (fragment == null) http://git-wip-us.apache.org/repos/asf/wicket/blob/a04959e9/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 e68f4e0..2d72ac0 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 @@ -19,11 +19,9 @@ 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; @@ -303,16 +301,4 @@ 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/a04959e9/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 388e436..1e0cac0 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 @@ -796,6 +796,40 @@ public class ComponentQueueingTest extends WicketTestCase tester.startPage(page); } + + /** + * https://issues.apache.org/jira/browse/WICKET-6088 + */ + @Test + public void queueComponentInsideWcAndEnclosure() + { + TestPage page = new TestPage(); + page.setPageMarkup(" <div wicket:id=\"container\">\n" + + " <div wicket:enclosure=\"child\">\n" + + " <p wicket:id=\"child\">1</p>\n" + + " <a wicket:id=\"child2\">2</a>\n" + + " </div>\n" + + " </div>"); + + WebMarkupContainer container = new WebMarkupContainer("container"); + + container.queue(new Label("child") + { + @Override + protected void onInitialize() + { + super.onInitialize(); + + setDefaultModel(Model.of("test")); + } + }); + + container.queue(new WebMarkupContainer("child2").setVisible(false)); + + page.queue(container); + + tester.startPage(page); + } /** * https://issues.apache.org/jira/browse/WICKET-6036
