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());
        }
 
        /**

Reply via email to