This is an automated email from the ASF dual-hosted git repository. mgrigorov pushed a commit to branch wicket-7055-special-handle-load-event in repository https://gitbox.apache.org/repos/asf/wicket.git
commit 1c7252b53d43291f8682670d9cdb2ecb02244bae Author: Martin Tzvetanov Grigorov <[email protected]> AuthorDate: Thu May 18 14:00:59 2023 +0300 WICKET-7055: AjaxEventBehavior onload event unstable Signed-off-by: Martin Tzvetanov Grigorov <[email protected]> --- .../org/apache/wicket/ajax/AjaxEventBehavior.java | 10 +++- .../org/apache/wicket/page/PartialPageUpdate.java | 2 +- .../apache/wicket/ajax/AjaxEventBehaviorTest.java | 65 ++++++++++++++++++++-- 3 files changed, 70 insertions(+), 7 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 71a091a09e..31f5e6b48b 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; @@ -94,7 +95,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 fa1ded5c19..98fb9880a7 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..4b898fe263 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,26 @@ 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(); + assertTrue(responseAsString.contains("function(){Wicket.Ajax.ajax({\"u\":\"./page?0-1.0-comp\",\"c\":\"comp1\",\"e\":\"load\"});")); + } + private static class EventNamesBehavior extends AjaxEventBehavior { /** @@ -112,9 +133,7 @@ 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) { @@ -131,13 +150,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>"); } } }
