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

mgrigorov 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 e7f146145a WICKET-7055: AjaxEventBehavior onload event unstable (#589)
e7f146145a is described below

commit e7f146145af0f4c01f479cc33b4f7a663a0fa70e
Author: Martin Grigorov <[email protected]>
AuthorDate: Mon May 22 09:28:21 2023 +0300

    WICKET-7055: AjaxEventBehavior onload event unstable (#589)
    
    Signed-off-by: Martin Tzvetanov Grigorov <[email protected]>
    (cherry picked from commit 285e661a5901b4e8613a5f61c0b4aea80a564182)
---
 .../org/apache/wicket/ajax/AjaxEventBehavior.java  | 10 +++-
 .../org/apache/wicket/page/PartialPageUpdate.java  |  2 +-
 .../apache/wicket/ajax/AjaxEventBehaviorTest.java  | 69 +++++++++++++++++++---
 3 files changed, 71 insertions(+), 10 deletions(-)

diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java 
b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
index e01b998e89..a067fa846a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
@@ -23,6 +23,7 @@ import org.apache.wicket.Component;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.head.OnLoadHeaderItem;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Checks;
 import org.apache.wicket.util.string.Strings;
@@ -101,7 +102,14 @@ public abstract class AjaxEventBehavior extends 
AbstractDefaultAjaxBehavior
                {
                        CharSequence js = getCallbackScript(component);
 
-                       
response.render(OnDomReadyHeaderItem.forScript(js.toString()));
+                       if ("load".equals(getEvent()))
+                       {
+                               
response.render(OnLoadHeaderItem.forScript(js.toString()));
+                       }
+                       else
+                       {
+                               
response.render(OnDomReadyHeaderItem.forScript(js.toString()));
+                       }
                }
        }
 
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java 
b/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
index 5b179f1c88..f63c81986d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
+++ b/wicket-core/src/main/java/org/apache/wicket/page/PartialPageUpdate.java
@@ -198,7 +198,7 @@ public abstract class PartialPageUpdate
 
                        writeFooter(response, encoding);
                } finally {
-                       if (header != null && originalHeaderContainer!= null) {
+                       if (header != null && originalHeaderContainer != null) {
                                // restore a normal header
                                page.replace(originalHeaderContainer);
                                header = null;
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java 
b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java
index 085bddaf62..b1211f0558 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxEventBehaviorTest.java
@@ -18,6 +18,7 @@ package org.apache.wicket.ajax;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -90,6 +91,27 @@ class AjaxEventBehaviorTest extends WicketTestCase
                });
        }
 
+       /**
+        * Tests execution of the 'load' event
+        * https://issues.apache.org/jira/browse/WICKET-7055
+        */
+       @Test
+       void executeLoadEvent()
+       {
+               AtomicInteger counter = new AtomicInteger(0);
+               LoadEventTestPage page = new LoadEventTestPage(counter);
+               tester.startPage(page);
+
+               assertEquals(0, counter.get());
+
+               // execute the first event
+               tester.executeAjaxEvent("comp", "load");
+               assertEquals(1, counter.get());
+               String responseAsString = tester.getLastResponseAsString();
+               System.err.println(responseAsString);
+               
assertTrue(responseAsString.contains("function(){Wicket.Ajax.ajax({\"u\":\"./page?0-1.0-comp\",\"c\":\"comp1\",\"e\":\"load\"});"));
+       }
+
        private static class EventNamesBehavior extends AjaxEventBehavior
        {
                /**
@@ -112,15 +134,10 @@ class AjaxEventBehaviorTest extends WicketTestCase
        /**
         * Test page for #executeSecondEvent()
         */
-       private static class SecondEventTestPage extends WebPage
-               implements
-                       IMarkupResourceStreamProvider
+       private static class SecondEventTestPage extends TestPage
        {
                private SecondEventTestPage(final AtomicInteger counter)
                {
-                       WebComponent comp = new WebComponent("comp");
-                       add(comp);
-
                        // register a behavior that listens on two events
                        comp.add(new AjaxEventBehavior("eventOne eventTwo")
                        {
@@ -131,13 +148,49 @@ class AjaxEventBehaviorTest extends WicketTestCase
                                }
                        });
                }
+       }
+
+       /**
+        * Test page for #executeLoadEvent()
+        */
+       private static class LoadEventTestPage extends TestPage
+       {
+               private LoadEventTestPage(final AtomicInteger counter)
+               {
+                       super();
+
+                       // register a behavior that listens on two events
+                       comp.add(new AjaxEventBehavior("load")
+                       {
+                               @Override
+                               protected void onEvent(AjaxRequestTarget target)
+                               {
+                                       counter.incrementAndGet();
+                                       target.add(getComponent());
+                               }
+                       });
+               }
+       }
+
+       private static class TestPage extends WebPage
+                       implements
+                       IMarkupResourceStreamProvider
+       {
+               protected final WebComponent comp;
+
+               private TestPage()
+               {
+                       comp = new WebComponent("comp");
+                       comp.setOutputMarkupId(true);
+                       add(comp);
+               }
 
                @Override
                public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
-                       Class<?> containerClass)
+                                                                               
                           Class<?> containerClass)
                {
                        return new StringResourceStream(
-                               "<html><body><span 
wicket:id='comp'></span></body></html>");
+                                       "<html><body><span 
wicket:id='comp'></span></body></html>");
                }
        }
 }

Reply via email to