Repository: wicket Updated Branches: refs/heads/lambdas-ajax 218a58e3e -> c5ee496a3
WICKET-5992 Add support for lambdas in Ajax behaviors & components Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c5ee496a Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c5ee496a Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c5ee496a Branch: refs/heads/lambdas-ajax Commit: c5ee496a355f6f0fbdbc6cd6446ea15a2af669f2 Parents: 218a58e Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Authored: Tue Mar 8 22:00:22 2016 +0100 Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Committed: Tue Mar 8 22:00:22 2016 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/wicket/Component.java | 20 ++++--- .../form/AjaxFormComponentUpdatingBehavior.java | 5 +- .../wicket/model/lambda/AjaxListener.java | 3 - .../java/org/apache/wicket/ComponentTest.java | 60 +++++++++++++------- 4 files changed, 50 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/wicket-core/src/main/java/org/apache/wicket/Component.java ---------------------------------------------------------------------- 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 ebd5b39..1b51695 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Component.java +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java @@ -4623,17 +4623,19 @@ public abstract class Component { case "change": case "blur": - ajaxBehavior = new AjaxFormComponentUpdatingBehavior(eventName, listener); - break; - default: - if (AjaxFormChoiceComponentUpdatingBehavior.appliesTo(this)) - { - ajaxBehavior = new AjaxFormChoiceComponentUpdatingBehavior(listener); - } - else + if (this instanceof FormComponent) { - ajaxBehavior = new AjaxEventBehavior(eventName, listener); + if (AjaxFormChoiceComponentUpdatingBehavior.appliesTo(this)) + { + ajaxBehavior = new AjaxFormChoiceComponentUpdatingBehavior(listener); + } else + { + ajaxBehavior = new AjaxFormComponentUpdatingBehavior(eventName, listener); + } + break; } + default: + ajaxBehavior = new AjaxEventBehavior(eventName, listener); } add(ajaxBehavior); http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java index a014ddf..71a3d59 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.java @@ -52,9 +52,6 @@ public class AjaxFormComponentUpdatingBehavior extends AjaxEventBehavior private static final Logger log = LoggerFactory .getLogger(AjaxFormComponentUpdatingBehavior.class); - /** - * - */ private static final long serialVersionUID = 1L; private final AjaxListener listener; @@ -188,7 +185,7 @@ public class AjaxFormComponentUpdatingBehavior extends AjaxEventBehavior } else { - onError(target, null); + onError(target, e); } } formComponent.updateAutoLabels(target); http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java index 3537be1..f79ac00 100644 --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java +++ b/wicket-core/src/main/java/org/apache/wicket/model/lambda/AjaxListener.java @@ -18,9 +18,6 @@ package org.apache.wicket.model.lambda; import org.apache.wicket.ajax.AjaxRequestTarget; -/** - * - */ @FunctionalInterface public interface AjaxListener extends WicketConsumer<AjaxRequestTarget> { http://git-wip-us.apache.org/repos/asf/wicket/blob/c5ee496a/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java b/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java index 9473979..8054f0c 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/ComponentTest.java @@ -16,19 +16,21 @@ */ package org.apache.wicket; +import static org.hamcrest.Matchers.emptyString; +import static org.hamcrest.Matchers.is; + import java.lang.reflect.Method; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.wicket.ajax.AjaxEventBehavior; -import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextArea; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import org.apache.wicket.model.lambda.AjaxListener; import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; @@ -182,7 +184,7 @@ public class ComponentTest extends WicketTestCase // make the link such that it can call listener interface // methods no matter whether it is visible or enabled - link = new Link("someId") { + link = new Link<Void>("someId") { @Override public boolean canCallListenerInterface(Method method) { @@ -249,7 +251,7 @@ public class ComponentTest extends WicketTestCase } @Test - public void onClick() + public void onComponentClick() { MockPageWithOneComponent page = new MockPageWithOneComponent(); WebMarkupContainer component = new WebMarkupContainer(MockPageWithOneComponent.COMPONENT_ID); @@ -258,29 +260,44 @@ public class ComponentTest extends WicketTestCase component.on(eventName, (target) -> executed.set(true)); - // this is how AjaxFormComponentUpdatingBehavior could be used -// component.on("change", new AjaxListener() -// { -// @Override -// public void onEvent(AjaxRequestTarget target) -// { -// // use 'form' if you need with -// final Form<?> form = Form.findForm(component); -// } -// -// @Override -// public void onError(AjaxRequestTarget target, RuntimeException error) -// { -// -// } -// }); + page.add(component); + tester.startPage(page); + assertFalse(executed.get()); + tester.executeAjaxEvent(component, eventName); + assertTrue(executed.get()); + } + + @Test + public void onFormComponentChange() + { + MockPageWithOneComponent page = new MockPageWithOneComponent(); + Model<String> model = Model.of(""); + TextArea<String> component = new TextArea<String>(MockPageWithOneComponent.COMPONENT_ID, model) { + @Override + protected void onComponentTag(ComponentTag tag) + { + tag.setName("textarea"); + super.onComponentTag(tag); + } + }; page.add(component); + final String eventName = "change"; + AtomicBoolean executed = new AtomicBoolean(false); + + component.on(eventName, (target) -> executed.set(true)); + tester.startPage(page); assertFalse(executed.get()); + assertThat(model.getObject(), is(emptyString())); + + String newValue = "newValue"; + tester.getRequest().setParameter(component.getInputName(), newValue); tester.executeAjaxEvent(component, eventName); + assertTrue(executed.get()); + assertThat(model.getObject(), is(newValue)); } /** @@ -288,7 +305,6 @@ public class ComponentTest extends WicketTestCase */ private static class FlagReserved5Component extends Component { - public FlagReserved5Component(final String id) { super(id); }