You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by th...@apache.org on 2022/04/20 12:43:23 UTC

[wicket] branch wicket-9.x updated: WICKET-6975 Ensure `behavior.renderHead` is called only once per component/behavior (#515)

This is an automated email from the ASF dual-hosted git repository.

theigl pushed a commit to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/wicket-9.x by this push:
     new d9fb6bcb24 WICKET-6975 Ensure `behavior.renderHead` is called only once per component/behavior (#515)
d9fb6bcb24 is described below

commit d9fb6bcb24126f8f25e05134e26dda8858754f33
Author: Thomas Heigl <th...@gmail.com>
AuthorDate: Wed Apr 20 14:29:44 2022 +0200

    WICKET-6975 Ensure `behavior.renderHead` is called only once per component/behavior (#515)
    
    (cherry picked from commit 558e14736e0c7654b366d9aac8d9a7753946051b)
---
 .../src/main/java/org/apache/wicket/Component.java     |  4 ++--
 .../org/apache/wicket/behavior/SharedBehaviorTest.java | 18 +++++++++++++++---
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java
index 5a2e9c3a45..9f7bd71f86 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Component.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
@@ -2666,10 +2666,10 @@ public abstract class Component
 			{
 				if (isBehaviorAccepted(behavior))
 				{
-					if (response.wasRendered(behavior) == false)
+					List<IClusterable> pair = List.of(this, behavior);
+					if (!response.wasRendered(pair))
 					{
 						behavior.renderHead(this, response);
-						List<IClusterable> pair = Arrays.asList(this, behavior);
 						response.markRendered(pair);
 					}
 				}
diff --git a/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java b/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java
index 3d23abbdcb..5d4d61a495 100644
--- a/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java
@@ -28,6 +28,8 @@ import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * @since 1.5.8
  */
@@ -49,6 +51,8 @@ class SharedBehaviorTest extends WicketTestCase
 	{
 		TestPage page = new TestPage();
 		executeTest(page, "SharedBehaviorTest_renderHead_expected.html");
+
+		assertEquals(page.sharedBehavior.renderHeadCount, 2);
 	}
 
 	/**
@@ -56,13 +60,18 @@ class SharedBehaviorTest extends WicketTestCase
 	 */
 	private static class TestPage extends WebPage implements IMarkupResourceStreamProvider
 	{
+
+		final SharedBehavior sharedBehavior;
+
 		private TestPage()
 		{
-			SharedBehavior behavior = new SharedBehavior();
+			sharedBehavior = new SharedBehavior();
 			WebComponent component1 = new WebComponent("comp1");
-			component1.add(behavior);
+			component1.add(sharedBehavior);
+			component1.add(sharedBehavior);
 			WebComponent component2 = new WebComponent("comp2");
-			component2.add(behavior);
+			component2.add(sharedBehavior);
+			component2.add(sharedBehavior);
 			add(component1, component2);
 		}
 
@@ -78,10 +87,13 @@ class SharedBehaviorTest extends WicketTestCase
 	 */
 	private static class SharedBehavior extends Behavior
 	{
+		int renderHeadCount;
+
 		@Override
 		public void renderHead(Component component, IHeaderResponse response)
 		{
 			super.renderHead(component, response);
+			renderHeadCount += 1;
 			response.render(StringHeaderItem.forString("\nRendering header contribution for component with id: " + component.getId()));
 		}
 	}