Repository: wicket Updated Branches: refs/heads/wicket-7.x 796b20ac6 -> 321ccb814
WICKET-6303 renderHead method of a Behavior added to a Border body is not called Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/321ccb81 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/321ccb81 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/321ccb81 Branch: refs/heads/wicket-7.x Commit: 321ccb814413cdc6cbbce7b3cdf24bc49e028aac Parents: 796b20a Author: Andrea Del Bene <[email protected]> Authored: Mon Jan 16 22:41:37 2017 +0100 Committer: Andrea Del Bene <[email protected]> Committed: Tue Jan 17 12:22:44 2017 +0100 ---------------------------------------------------------------------- .../java/org/apache/wicket/MarkupContainer.java | 20 ++++++- .../wicket/markup/html/border/Border.java | 29 +++------- .../html/border/BorderWithNestedBody.java | 6 ++ .../html/border/BorderWithNestedBodyPage.html | 26 +++++++++ .../html/border/BorderWithNestedBodyPage.java | 60 ++++++++++++++++++++ .../markup/html/border/ComponentBorderTest.java | 7 ++- .../html/repeater/data/sort/OrderByBorder.java | 1 - 7 files changed, 124 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/321ccb81/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 bee0b69..c38433a 100644 --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java @@ -2157,14 +2157,21 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp ((IQueueRegion)child).dequeue(); } + if (childType == ChildToDequeueType.BORDER) + { + Border childContainer = (Border)child; + // propagate dequeuing to border's body + MarkupContainer body = childContainer.getBodyContainer(); + + dequeueChildrenContainer(dequeue, body); + } + if (childType == ChildToDequeueType.MARKUP_CONTAINER) { // propagate dequeuing to containers MarkupContainer childContainer = (MarkupContainer)child; - dequeue.pushContainer(childContainer); - childContainer.dequeue(dequeue); - dequeue.popContainer(); + dequeueChildrenContainer(dequeue, childContainer); } if (childType == ChildToDequeueType.NULL || @@ -2186,6 +2193,13 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp throw new IllegalStateException(String.format("Could not find the closing tag for '%s'", tag)); } + private void dequeueChildrenContainer(DequeueContext dequeue, MarkupContainer child) + { + dequeue.pushContainer(child); + child.dequeue(dequeue); + dequeue.popContainer(); + } + /** @see IQueueRegion#newDequeueContext() */ public DequeueContext newDequeueContext() { http://git-wip-us.apache.org/repos/asf/wicket/blob/321ccb81/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 15c9dbe..b11df1a 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 @@ -169,18 +169,7 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes super(id, model); body = new BorderBodyContainer(id + "_" + BODY); - } - - @Override - protected void onInitialize() - { - super.onInitialize(); - - //if body has not been assigned yet, we queue it - if (body.getParent() == null) - { - dequeue(); - } + queueToBorder(body); } /** @@ -319,13 +308,6 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes public Border addToBorder(final Component... children) { super.add(children); - - //if body has not been assigned yet, we queue it - if (body.getParent() == null) - { - dequeue(); - } - return this; } @@ -336,6 +318,13 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes return this; } + @Override + protected void onConfigure() + { + super.onConfigure(); + dequeue(); + } + /** * Queues children components to the Border itself * @@ -669,8 +658,8 @@ public abstract class Border extends WebMarkupContainer implements IComponentRes { //synch the tag id with the one of the body component tag.setId(body.getId()); - return body; } + return super.findComponentToDequeue(tag); } http://git-wip-us.apache.org/repos/asf/wicket/blob/321ccb81/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBody.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBody.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBody.java index b23c2e5..4d94073 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBody.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBody.java @@ -28,6 +28,12 @@ public class BorderWithNestedBody extends Border { super(id); + } + + @Override + protected void onInitialize() + { + super.onInitialize(); addToBorder(new BorderComponent1("nestedBorder")); } http://git-wip-us.apache.org/repos/asf/wicket/blob/321ccb81/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.html ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.html new file mode 100644 index 0000000..6b8172d --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.html @@ -0,0 +1,26 @@ +<!-- + ==================================================================== + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!DOCTYPE html> +<html> +<head> +<meta charset="UTF-8"> +<title>Insert title here</title> +</head> +<body> + <div wicket:id="outerBorder"> + <span wicket:id="ajaxClick">Ajax click</span> + </div> +</body> +</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/321ccb81/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.java new file mode 100644 index 0000000..a704351 --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/BorderWithNestedBodyPage.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.border; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.internal.HtmlHeaderContainer; + +public class BorderWithNestedBodyPage extends WebPage +{ + /** + * + */ + private static final long serialVersionUID = 8364550846663714451L; + + //https://issues.apache.org/jira/browse/WICKET-6303 + private boolean behaviorRendered = false; + + @Override + protected void onInitialize() + { + super.onInitialize(); + BorderWithNestedBody border = new BorderWithNestedBody("outerBorder"); + border.add(new AjaxLink<Void>("ajaxClick") + { + @Override + public void internalRenderHead(HtmlHeaderContainer container) + { + super.internalRenderHead(container); + behaviorRendered = true; + } + + @Override + public void onClick(AjaxRequestTarget target) + {} + }); + + add(border); + } + + public boolean isBehaviorRendered() + { + return behaviorRendered; + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/321ccb81/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java index e3f38b8..8dcb1f1 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/border/ComponentBorderTest.java @@ -130,10 +130,15 @@ public class ComponentBorderTest extends WicketTestCase @Test public void borderWithBodyInsideAnotherBody() throws Exception { - Border borderTest = tester.startComponentInPage(new BorderWithNestedBody("test")); + BorderWithNestedBodyPage page = tester.startPage(BorderWithNestedBodyPage.class); + + Border borderTest = (Border) page.get("outerBorder"); Border nestedBorder = (Border)borderTest.get("nestedBorder"); assertNotNull(borderTest.getBodyContainer().getParent()); assertNotNull(nestedBorder.getBodyContainer().getParent()); + + //https://issues.apache.org/jira/browse/WICKET-6303 + assertTrue(page.isBehaviorRendered()); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/321ccb81/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java index 1482a50..fdf378a 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/sort/OrderByBorder.java @@ -70,7 +70,6 @@ public class OrderByBorder<S> extends Border OrderByLink<S> link = newOrderByLink("orderByLink", property, stateLocator); addToBorder(link); - link.add(getBodyContainer()); } /**
