You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Sven Meier <sv...@meiers.net> on 2016/03/12 22:46:11 UTC

Re: wicket git commit: Introduce Lambdas class - a class with factory methods for creating components and behaviors by using lambdas for their callback methods

Hi,

 > org.apache.wicket.lambdas

IMHO org.apache.wicket.lambda (not the singular) would be better: it 
aligns with org.apache.wicket.model.lambda and follows other package 
namings.

 > Lambdas

What's the purpose of this class - is it supposed to ease static imports 
in an IDE?
I'd rather keep all those implementations in the relevant classes, 
instead of this single location. If you see the need for such a 
'collector', we could reverse the delegation:

public class Lambdas {

     public static AjaxSelfUpdatingTimerBehavior onSelfUpdate(Duration 
interval, WicketConsumer<AjaxRequestTarget> onTimer)
     {
         return AjaxSelfUpdatingTimerBehavior.onSelfUpdate(interval, 
onTimer);
     }

}

In this case I think a plural makes sense though.

Regards
Sven


On 12.03.2016 21:51, mgrigorov@apache.org wrote:
> Repository: wicket
> Updated Branches:
>    refs/heads/static-factories-for-lambdas 229fee822 -> d3bee7507
>
>
> Introduce Lambdas class - a class with factory methods for creating components and behaviors by using lambdas for their callback methods
>
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d3bee750
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d3bee750
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d3bee750
>
> Branch: refs/heads/static-factories-for-lambdas
> Commit: d3bee7507e14e7a1dc8ba9e9a0c77e02bffacda6
> Parents: 229fee8
> Author: Martin Tzvetanov Grigorov <mg...@apache.org>
> Authored: Sat Mar 12 21:50:13 2016 +0100
> Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
> Committed: Sat Mar 12 21:50:13 2016 +0100
>
> ----------------------------------------------------------------------
>   .../wicket/ajax/AbstractAjaxTimerBehavior.java  |  15 +-
>   .../wicket/ajax/AjaxClientInfoBehavior.java     |  15 +-
>   .../apache/wicket/ajax/AjaxEventBehavior.java   |  14 +-
>   .../ajax/AjaxNewWindowNotifyingBehavior.java    |  24 +-
>   .../ajax/AjaxSelfUpdatingTimerBehavior.java     |  15 +-
>   ...AjaxFormChoiceComponentUpdatingBehavior.java |  34 +-
>   .../form/AjaxFormComponentUpdatingBehavior.java |  35 +-
>   .../ajax/form/AjaxFormSubmitBehavior.java       |  33 +-
>   .../wicket/ajax/form/OnChangeAjaxBehavior.java  |  35 +-
>   .../ajax/markup/html/AjaxFallbackLink.java      |   2 -
>   .../wicket/ajax/markup/html/AjaxLink.java       |  17 +-
>   .../ajax/markup/html/form/AjaxButton.java       |  40 +-
>   .../ajax/markup/html/form/AjaxCheckBox.java     |  17 +-
>   .../ajax/markup/html/form/AjaxSubmitLink.java   |  33 +-
>   .../java/org/apache/wicket/lambdas/Lambdas.java | 366 +++++++++++++++++++
>   .../apache/wicket/lambdas/WicketBiConsumer.java |  32 ++
>   .../apache/wicket/lambdas/WicketConsumer.java   |  30 ++
>   .../apache/wicket/lambdas/WicketFunction.java   |  32 ++
>   .../apache/wicket/lambdas/WicketSupplier.java   |  30 ++
>   .../apache/wicket/markup/html/link/Link.java    |  17 +-
>   .../java/org/apache/wicket/model/Model.java     |  41 +++
>   .../apache/wicket/model/lambda/LambdaModel.java |   7 +-
>   .../model/lambda/SupplierCachingModel.java      |   1 +
>   .../wicket/model/lambda/SupplierModel.java      |   1 +
>   .../wicket/model/lambda/WicketBiConsumer.java   |  32 --
>   .../wicket/model/lambda/WicketConsumer.java     |  30 --
>   .../wicket/model/lambda/WicketFunction.java     |  32 --
>   .../wicket/model/lambda/WicketSupplier.java     |  30 --
>   .../wicket/model/lambda/LambdaModelTest.java    |   2 +
>   .../model/lambda/SupplierCachingModelTest.java  |   1 +
>   .../wicket/model/lambda/SupplierModelTest.java  |   1 +
>   .../ajax/markup/html/IndicatingAjaxButton.java  |   9 +-
>   .../ajax/markup/html/IndicatingAjaxLink.java    |   2 +-
>   33 files changed, 603 insertions(+), 422 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> index aef5591..4a3609c 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
> @@ -19,10 +19,10 @@ package org.apache.wicket.ajax;
>   import org.apache.wicket.Component;
>   import org.apache.wicket.Page;
>   import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.head.IHeaderResponse;
>   import org.apache.wicket.markup.head.OnLoadHeaderItem;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   import org.apache.wicket.util.time.Duration;
>   
>   /**
> @@ -165,16 +165,7 @@ public abstract class AbstractAjaxTimerBehavior extends AbstractDefaultAjaxBehav
>   
>   	public static AbstractAjaxTimerBehavior onTimer(Duration interval, WicketConsumer<AjaxRequestTarget> onTimer)
>   	{
> -		Args.notNull(onTimer, "onTimer");
> -
> -		return new AbstractAjaxTimerBehavior(interval)
> -		{
> -			@Override
> -			protected void onTimer(AjaxRequestTarget target)
> -			{
> -				onTimer.accept(target);
> -			}
> -		};
> +		return Lambdas.onTimer(interval, onTimer);
>   	}
>   
>   	/**
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
> index 22c9316..bd7c954 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
> @@ -19,15 +19,15 @@ package org.apache.wicket.ajax;
>   import org.apache.wicket.Component;
>   import org.apache.wicket.Session;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketBiConsumer;
>   import org.apache.wicket.markup.head.IHeaderResponse;
>   import org.apache.wicket.markup.head.JavaScriptHeaderItem;
>   import org.apache.wicket.markup.html.pages.BrowserInfoForm;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>   import org.apache.wicket.protocol.http.ClientProperties;
>   import org.apache.wicket.protocol.http.request.WebClientInfo;
>   import org.apache.wicket.request.IRequestParameters;
>   import org.apache.wicket.request.cycle.RequestCycle;
> -import org.apache.wicket.util.lang.Args;
>   import org.apache.wicket.util.time.Duration;
>   
>   /**
> @@ -122,16 +122,7 @@ public class AjaxClientInfoBehavior extends AbstractAjaxTimerBehavior
>   
>   	public static AjaxClientInfoBehavior onClientInfo(WicketBiConsumer<AjaxRequestTarget, WebClientInfo> onClientInfo)
>   	{
> -		Args.notNull(onClientInfo, "onClientInfo");
> -
> -		return new AjaxClientInfoBehavior()
> -		{
> -			@Override
> -			protected void onClientInfo(AjaxRequestTarget target, WebClientInfo clientInfo)
> -			{
> -				onClientInfo.accept(target, clientInfo);
> -			}
> -		};
> +		return Lambdas.onClientInfo(onClientInfo);
>   	}
>   
>   	@Override
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
> ----------------------------------------------------------------------
> 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 7a11b2d..fa49035 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
> @@ -21,9 +21,10 @@ import java.util.List;
>   
>   import org.apache.wicket.Component;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.head.IHeaderResponse;
>   import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
> -import org.apache.wicket.model.lambda.WicketConsumer;
>   import org.apache.wicket.util.lang.Args;
>   import org.apache.wicket.util.lang.Checks;
>   import org.apache.wicket.util.string.Strings;
> @@ -166,15 +167,6 @@ public abstract class AjaxEventBehavior extends AbstractDefaultAjaxBehavior
>   
>   	public static AjaxEventBehavior onEvent(String eventName, WicketConsumer<AjaxRequestTarget> onEvent)
>   	{
> -		Args.notNull(onEvent, "onEvent");
> -
> -		return new AjaxEventBehavior(eventName)
> -		{
> -			@Override
> -			protected void onEvent(AjaxRequestTarget target)
> -			{
> -				onEvent.accept(target);
> -			}
> -		};
> +		return Lambdas.onEvent(eventName, onEvent);
>   	}
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
> index 932d54e..130666b 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
> @@ -21,16 +21,13 @@ import java.util.UUID;
>   import org.apache.wicket.Component;
>   import org.apache.wicket.WicketRuntimeException;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   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.markup.html.WebPage;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.protocol.http.request.WebClientInfo;
> -import org.apache.wicket.util.lang.Args;
>   import org.apache.wicket.util.string.StringValue;
> -import org.apache.wicket.util.string.Strings;
>   
>   /**
>    * An Ajax behavior that notifies when a new browser window/tab is opened with
> @@ -133,21 +130,6 @@ public abstract class AjaxNewWindowNotifyingBehavior extends AbstractDefaultAjax
>   
>   	public static AjaxNewWindowNotifyingBehavior onNewWindow(String windowName, WicketConsumer<AjaxRequestTarget> onNewWindow)
>   	{
> -		Args.notNull(onNewWindow, "onNewWindow");
> -
> -		if (Strings.isEmpty(windowName))
> -		{
> -			windowName = UUID.randomUUID().toString();
> -		}
> -
> -		return new AjaxNewWindowNotifyingBehavior(windowName)
> -		{
> -			@Override
> -			protected void onNewWindow(AjaxRequestTarget target)
> -			{
> -				onNewWindow.accept(target);
> -			}
> -		};
> +		return Lambdas.onNewWindow(windowName, onNewWindow);
>   	}
> -
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
> index 479a6b9..d615ae5 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
> @@ -16,8 +16,8 @@
>    */
>   package org.apache.wicket.ajax;
>   
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.util.time.Duration;
>   
>   /**
> @@ -67,15 +67,6 @@ public class AjaxSelfUpdatingTimerBehavior extends AbstractAjaxTimerBehavior
>   
>   	public static AbstractAjaxTimerBehavior onSelfUpdate(Duration interval, WicketConsumer<AjaxRequestTarget> onTimer)
>   	{
> -		Args.notNull(onTimer, "onTimer");
> -
> -		return new AjaxSelfUpdatingTimerBehavior(interval)
> -		{
> -			@Override
> -			protected void onPostProcessTarget(AjaxRequestTarget target)
> -			{
> -				onTimer.accept(target);
> -			}
> -		};
> +		return Lambdas.onSelfUpdate(interval, onTimer);
>   	}
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
> index e5bc69a..19915d6 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
> @@ -21,14 +21,14 @@ import org.apache.wicket.WicketRuntimeException;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxCallListener;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketBiConsumer;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice;
>   import org.apache.wicket.markup.html.form.CheckGroup;
>   import org.apache.wicket.markup.html.form.FormComponent;
>   import org.apache.wicket.markup.html.form.RadioChoice;
>   import org.apache.wicket.markup.html.form.RadioGroup;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   
>   /**
>    * This is a Ajax Component Update Behavior that is meant for choices/groups that are not one
> @@ -114,36 +114,12 @@ public abstract class AjaxFormChoiceComponentUpdatingBehavior extends
>   			(component instanceof CheckGroup);
>   	}
>   
> -
>   	public static AjaxFormChoiceComponentUpdatingBehavior onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice) {
> -		Args.notNull(onUpdateChoice, "onUpdateChoice");
> -		return new AjaxFormChoiceComponentUpdatingBehavior()
> -		{
> -			@Override
> -			protected void onUpdate(AjaxRequestTarget target)
> -			{
> -				onUpdateChoice.accept(target);
> -			}
> -		};
> +		return Lambdas.onUpdateChoice(onUpdateChoice);
>   	}
>   
>   	public static AjaxFormChoiceComponentUpdatingBehavior onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice,
>   	                                                         WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError) {
> -		Args.notNull(onUpdateChoice, "onUpdateChoice");
> -		Args.notNull(onError, "onError");
> -		return new AjaxFormChoiceComponentUpdatingBehavior()
> -		{
> -			@Override
> -			protected void onUpdate(AjaxRequestTarget target)
> -			{
> -				onUpdateChoice.accept(target);
> -			}
> -
> -			@Override
> -			protected void onError(AjaxRequestTarget target, RuntimeException e)
> -			{
> -				onError.accept(target, e);
> -			}
> -		};
> +		return Lambdas.onUpdateChoice(onUpdateChoice, onError);
>   	}
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/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 97b31a3..490afd6 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
> @@ -23,11 +23,11 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketBiConsumer;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.html.form.FormComponent;
>   import org.apache.wicket.markup.html.form.validation.IFormValidator;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   import org.slf4j.Logger;
>   import org.slf4j.LoggerFactory;
>   
> @@ -205,39 +205,14 @@ public abstract class AjaxFormComponentUpdatingBehavior extends AjaxEventBehavio
>   
>   	public static AjaxFormComponentUpdatingBehavior onUpdate(String eventName, WicketConsumer<AjaxRequestTarget> onUpdate)
>   	{
> -		Args.notNull(onUpdate, "onUpdate");
> -
> -		return new AjaxFormComponentUpdatingBehavior(eventName)
> -		{
> -			@Override
> -			protected void onUpdate(AjaxRequestTarget target)
> -			{
> -				onUpdate.accept(target);
> -			}
> -		};
> +		return Lambdas.onUpdate(eventName, onUpdate);
>   	}
>   
>   	public static AjaxFormComponentUpdatingBehavior onUpdate(String eventName,
>   	                                                         WicketConsumer<AjaxRequestTarget> onUpdate,
>   	                                                         WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>   	{
> -		Args.notNull(onUpdate, "onUpdate");
> -		Args.notNull(onError, "onError");
> -
> -		return new AjaxFormComponentUpdatingBehavior(eventName)
> -		{
> -			@Override
> -			protected void onUpdate(AjaxRequestTarget target)
> -			{
> -				onUpdate.accept(target);
> -			}
> -
> -			@Override
> -			protected void onError(AjaxRequestTarget target, RuntimeException e)
> -			{
> -				onError.accept(target, e);
> -			}
> -		};
> +		return onUpdate(eventName, onUpdate, onError);
>   	}
>   
>   	/**
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
> index 7b7c4a0..7011481 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
> @@ -21,12 +21,12 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.html.form.Button;
>   import org.apache.wicket.markup.html.form.Form;
>   import org.apache.wicket.markup.html.form.IFormSubmitter;
>   import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   
>   /**
>    * Ajax event behavior that submits a form via ajax when the event it is attached to, is invoked.
> @@ -272,37 +272,12 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior
>   
>   	public static AjaxFormSubmitBehavior onSubmit(String eventName, WicketConsumer<AjaxRequestTarget> onSubmit)
>   	{
> -		Args.notNull(onSubmit, "onSubmit");
> -
> -		return new AjaxFormSubmitBehavior(eventName)
> -		{
> -			@Override
> -			protected void onSubmit(AjaxRequestTarget target)
> -			{
> -				onSubmit.accept(target);
> -			}
> -		};
> +		return Lambdas.onSubmit(eventName, onSubmit);
>   	}
>   
>   	public static AjaxFormSubmitBehavior onSubmit(String eventName,
>   	                                              WicketConsumer<AjaxRequestTarget> onSubmit,
>   	                                              WicketConsumer<AjaxRequestTarget> onError) {
> -		Args.notNull(onSubmit, "onSubmit");
> -		Args.notNull(onError, "onError");
> -
> -		return new AjaxFormSubmitBehavior(eventName)
> -		{
> -			@Override
> -			protected void onSubmit(AjaxRequestTarget target)
> -			{
> -				onSubmit.accept(target);
> -			}
> -
> -			@Override
> -			protected void onError(AjaxRequestTarget target)
> -			{
> -				onError.accept(target);
> -			}
> -		};
> +		return Lambdas.onSubmit(eventName, onSubmit, onError);
>   	}
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
> index e1f2d9b..01c07a8 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
> @@ -19,12 +19,12 @@ package org.apache.wicket.ajax.form;
>   import org.apache.wicket.Component;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketBiConsumer;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.html.form.FormComponent;
>   import org.apache.wicket.markup.html.form.TextArea;
>   import org.apache.wicket.markup.html.form.TextField;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   
>   /**
>    * A behavior that updates the hosting {@link FormComponent} via Ajax when value of the component is
> @@ -80,38 +80,13 @@ public abstract class OnChangeAjaxBehavior extends AjaxFormComponentUpdatingBeha
>   
>   	public static OnChangeAjaxBehavior onChange(WicketConsumer<AjaxRequestTarget> onChange)
>   	{
> -		Args.notNull(onChange, "onChange");
> -
> -		return new OnChangeAjaxBehavior()
> -		{
> -			@Override
> -			protected void onUpdate(AjaxRequestTarget target)
> -			{
> -				onChange.accept(target);
> -			}
> -		};
> +		return Lambdas.onChange(onChange);
>   	}
>   
>   	public static OnChangeAjaxBehavior onChange(WicketConsumer<AjaxRequestTarget> onChange,
>   	                                            WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>   	{
> -		Args.notNull(onChange, "onChange");
> -		Args.notNull(onError, "onError");
> -
> -		return new OnChangeAjaxBehavior()
> -		{
> -			@Override
> -			protected void onUpdate(AjaxRequestTarget target)
> -			{
> -				onChange.accept(target);
> -			}
> -
> -			@Override
> -			protected void onError(AjaxRequestTarget target, RuntimeException e)
> -			{
> -				onError.accept(target, e);
> -			}
> -		};
> +		return Lambdas.onChange(onChange, onError);
>   	}
>   
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
> index 29ccb99..d4f95a3 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
> @@ -24,8 +24,6 @@ import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>   import org.apache.wicket.markup.ComponentTag;
>   import org.apache.wicket.markup.html.link.Link;
>   import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   
>   /**
>    * An ajax link that will degrade to a normal request if ajax is not available or javascript is
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
> index bf3d4d5..1907f58 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
> @@ -20,11 +20,11 @@ import org.apache.wicket.IGenericComponent;
>   import org.apache.wicket.ajax.AjaxEventBehavior;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.ComponentTag;
>   import org.apache.wicket.markup.html.link.AbstractLink;
>   import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   
>   /**
>    * A component that allows a trigger request to be triggered via html anchor tag
> @@ -135,17 +135,8 @@ public abstract class AjaxLink<T> extends AbstractLink implements IAjaxLink, IGe
>   	@Override
>   	public abstract void onClick(final AjaxRequestTarget target);
>   
> -	public static <T> AjaxLink<T> ajaxLink(String id, WicketConsumer<AjaxRequestTarget> onClick)
> +	public static <T> AjaxLink<T> onClick(String id, WicketConsumer<AjaxRequestTarget> onClick)
>   	{
> -		Args.notNull(onClick, "onClick");
> -
> -		return new AjaxLink<T>(id)
> -		{
> -			@Override
> -			public void onClick(AjaxRequestTarget target)
> -			{
> -				onClick.accept(target);
> -			}
> -		};
> +		return Lambdas.ajaxLink(id, onClick);
>   	}
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
> index ce2fcf7..9d3732f 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
> @@ -19,12 +19,12 @@ package org.apache.wicket.ajax.markup.html.form;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>   import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketBiConsumer;
>   import org.apache.wicket.markup.ComponentTag;
>   import org.apache.wicket.markup.html.form.Button;
>   import org.apache.wicket.markup.html.form.Form;
>   import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
> -import org.apache.wicket.util.lang.Args;
>   import org.slf4j.Logger;
>   import org.slf4j.LoggerFactory;
>   
> @@ -219,40 +219,16 @@ public abstract class AjaxButton extends Button
>   	{
>   	}
>   
> -	public static AjaxButton ajaxButton(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
> +	public static AjaxButton onSubmit(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>   	{
> -		Args.notNull(onSubmit, "onSubmit");
> -
> -		return new AjaxButton(id)
> -		{
> -			@Override
> -			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> -			{
> -				onSubmit.accept(target, form);
> -			}
> -		};
> +		return Lambdas.ajaxButton(id, onSubmit);
>   	}
>   
> -	public static AjaxButton ajaxButton(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
> -	                                  WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
> +	public static AjaxButton onSubmit(String id,
> +	                                    WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
> +	                                    WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>   	{
> -		Args.notNull(onSubmit, "onSubmit");
> -		Args.notNull(onError, "onError");
> -
> -		return new AjaxButton(id)
> -		{
> -			@Override
> -			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> -			{
> -				onSubmit.accept(target, form);
> -			}
> -
> -			@Override
> -			protected void onError(AjaxRequestTarget target, Form<?> form)
> -			{
> -				onError.accept(target, form);
> -			}
> -		};
> +		return Lambdas.ajaxButton(id, onSubmit, onError);
>   	}
>   
>   	/**
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
> index 54e8b3d..5dba68e 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
> @@ -19,10 +19,10 @@ package org.apache.wicket.ajax.markup.html.form;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>   import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.html.form.CheckBox;
>   import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> -import org.apache.wicket.util.lang.Args;
>   
>   /**
>    * A CheckBox which is updated via ajax when the user changes its value
> @@ -92,17 +92,8 @@ public abstract class AjaxCheckBox extends CheckBox
>   	 */
>   	protected abstract void onUpdate(AjaxRequestTarget target);
>   
> -	public static AjaxCheckBox ajaxCheckBox(String id, WicketConsumer<AjaxRequestTarget> onUpdate)
> +	public static AjaxCheckBox onUpdate(String id, WicketConsumer<AjaxRequestTarget> onUpdate)
>   	{
> -		Args.notNull(onUpdate, "onUpdate");
> -
> -		return new AjaxCheckBox(id)
> -		{
> -			@Override
> -			public void onUpdate(AjaxRequestTarget target)
> -			{
> -				onUpdate.accept(target);
> -			}
> -		};
> +		return Lambdas.ajaxCheckBox(id, onUpdate);
>   	}
>   }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
> index f369bf6..552f64c 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
> @@ -19,11 +19,11 @@ package org.apache.wicket.ajax.markup.html.form;
>   import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>   import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketBiConsumer;
>   import org.apache.wicket.markup.ComponentTag;
>   import org.apache.wicket.markup.html.form.AbstractSubmitLink;
>   import org.apache.wicket.markup.html.form.Form;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
> -import org.apache.wicket.util.lang.Args;
>   import org.slf4j.Logger;
>   import org.slf4j.LoggerFactory;
>   
> @@ -138,39 +138,14 @@ public abstract class AjaxSubmitLink extends AbstractSubmitLink
>   
>   	public static AjaxSubmitLink ajaxSubmitLink(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>   	{
> -		Args.notNull(onSubmit, "onSubmit");
> -
> -		return new AjaxSubmitLink(id)
> -		{
> -			@Override
> -			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> -			{
> -				onSubmit.accept(target, form);
> -			}
> -		};
> +		return Lambdas.ajaxSubmitLink(id, onSubmit);
>   	}
>   
>   	public static AjaxSubmitLink ajaxSubmitLink(String id,
>   	                                            WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>   	                                            WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>   	{
> -		Args.notNull(onSubmit, "onSubmit");
> -		Args.notNull(onError, "onError");
> -
> -		return new AjaxSubmitLink(id)
> -		{
> -			@Override
> -			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> -			{
> -				onSubmit.accept(target, form);
> -			}
> -
> -			@Override
> -			protected void onError(AjaxRequestTarget target, Form<?> form)
> -			{
> -				onError.accept(target, form);
> -			}
> -		};
> +		return Lambdas.ajaxSubmitLink(id, onSubmit, onError);
>   	}
>   
>   	protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java b/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
> new file mode 100644
> index 0000000..0397706
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
> @@ -0,0 +1,366 @@
> +package org.apache.wicket.lambdas;
> +
> +import java.util.UUID;
> +
> +import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
> +import org.apache.wicket.ajax.AjaxClientInfoBehavior;
> +import org.apache.wicket.ajax.AjaxEventBehavior;
> +import org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior;
> +import org.apache.wicket.ajax.AjaxRequestTarget;
> +import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
> +import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
> +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
> +import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
> +import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
> +import org.apache.wicket.ajax.markup.html.AjaxLink;
> +import org.apache.wicket.ajax.markup.html.form.AjaxButton;
> +import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
> +import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
> +import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.link.Link;
> +import org.apache.wicket.protocol.http.request.WebClientInfo;
> +import org.apache.wicket.util.lang.Args;
> +import org.apache.wicket.util.string.Strings;
> +import org.apache.wicket.util.time.Duration;
> +
> +/**
> + *
> + */
> +public class Lambdas
> +{
> +	public static AbstractAjaxTimerBehavior onTimer(Duration interval, WicketConsumer<AjaxRequestTarget> onTimer)
> +	{
> +		Args.notNull(onTimer, "onTimer");
> +
> +		return new AbstractAjaxTimerBehavior(interval)
> +		{
> +			@Override
> +			protected void onTimer(AjaxRequestTarget target)
> +			{
> +				onTimer.accept(target);
> +			}
> +		};
> +	}
> +
> +	public static AjaxClientInfoBehavior onClientInfo(WicketBiConsumer<AjaxRequestTarget, WebClientInfo> onClientInfo)
> +	{
> +		Args.notNull(onClientInfo, "onClientInfo");
> +
> +		return new AjaxClientInfoBehavior()
> +		{
> +			@Override
> +			protected void onClientInfo(AjaxRequestTarget target, WebClientInfo clientInfo)
> +			{
> +				onClientInfo.accept(target, clientInfo);
> +			}
> +		};
> +	}
> +
> +	public static AjaxEventBehavior onEvent(String eventName, WicketConsumer<AjaxRequestTarget> onEvent)
> +	{
> +		Args.notNull(onEvent, "onEvent");
> +
> +		return new AjaxEventBehavior(eventName)
> +		{
> +			@Override
> +			protected void onEvent(AjaxRequestTarget target)
> +			{
> +				onEvent.accept(target);
> +			}
> +		};
> +	}
> +
> +	public static AjaxNewWindowNotifyingBehavior onNewWindow(String windowName, WicketConsumer<AjaxRequestTarget> onNewWindow)
> +	{
> +		Args.notNull(onNewWindow, "onNewWindow");
> +
> +		if (Strings.isEmpty(windowName))
> +		{
> +			windowName = UUID.randomUUID().toString();
> +		}
> +
> +		return new AjaxNewWindowNotifyingBehavior(windowName)
> +		{
> +			@Override
> +			protected void onNewWindow(AjaxRequestTarget target)
> +			{
> +				onNewWindow.accept(target);
> +			}
> +		};
> +	}
> +
> +	public static AbstractAjaxTimerBehavior onSelfUpdate(Duration interval, WicketConsumer<AjaxRequestTarget> onTimer)
> +	{
> +		Args.notNull(onTimer, "onTimer");
> +
> +		return new AjaxSelfUpdatingTimerBehavior(interval)
> +		{
> +			@Override
> +			protected void onPostProcessTarget(AjaxRequestTarget target)
> +			{
> +				onTimer.accept(target);
> +			}
> +		};
> +	}
> +
> +
> +	public static AjaxFormChoiceComponentUpdatingBehavior onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice) {
> +		Args.notNull(onUpdateChoice, "onUpdateChoice");
> +		return new AjaxFormChoiceComponentUpdatingBehavior()
> +		{
> +			@Override
> +			protected void onUpdate(AjaxRequestTarget target)
> +			{
> +				onUpdateChoice.accept(target);
> +			}
> +		};
> +	}
> +
> +	public static AjaxFormChoiceComponentUpdatingBehavior onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice,
> +	                                                                     WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError) {
> +		Args.notNull(onUpdateChoice, "onUpdateChoice");
> +		Args.notNull(onError, "onError");
> +		return new AjaxFormChoiceComponentUpdatingBehavior()
> +		{
> +			@Override
> +			protected void onUpdate(AjaxRequestTarget target)
> +			{
> +				onUpdateChoice.accept(target);
> +			}
> +
> +			@Override
> +			protected void onError(AjaxRequestTarget target, RuntimeException e)
> +			{
> +				onError.accept(target, e);
> +			}
> +		};
> +	}
> +
> +
> +	public static AjaxFormComponentUpdatingBehavior onUpdate(String eventName, WicketConsumer<AjaxRequestTarget> onUpdate)
> +	{
> +		Args.notNull(onUpdate, "onUpdate");
> +
> +		return new AjaxFormComponentUpdatingBehavior(eventName)
> +		{
> +			@Override
> +			protected void onUpdate(AjaxRequestTarget target)
> +			{
> +				onUpdate.accept(target);
> +			}
> +		};
> +	}
> +
> +	public static AjaxFormComponentUpdatingBehavior onUpdate(String eventName,
> +	                                                         WicketConsumer<AjaxRequestTarget> onUpdate,
> +	                                                         WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
> +	{
> +		Args.notNull(onUpdate, "onUpdate");
> +		Args.notNull(onError, "onError");
> +
> +		return new AjaxFormComponentUpdatingBehavior(eventName)
> +		{
> +			@Override
> +			protected void onUpdate(AjaxRequestTarget target)
> +			{
> +				onUpdate.accept(target);
> +			}
> +
> +			@Override
> +			protected void onError(AjaxRequestTarget target, RuntimeException e)
> +			{
> +				onError.accept(target, e);
> +			}
> +		};
> +	}
> +
> +	public static AjaxFormSubmitBehavior onSubmit(String eventName, WicketConsumer<AjaxRequestTarget> onSubmit)
> +	{
> +		Args.notNull(onSubmit, "onSubmit");
> +
> +		return new AjaxFormSubmitBehavior(eventName)
> +		{
> +			@Override
> +			protected void onSubmit(AjaxRequestTarget target)
> +			{
> +				onSubmit.accept(target);
> +			}
> +		};
> +	}
> +
> +	public static AjaxFormSubmitBehavior onSubmit(String eventName,
> +	                                              WicketConsumer<AjaxRequestTarget> onSubmit,
> +	                                              WicketConsumer<AjaxRequestTarget> onError) {
> +		Args.notNull(onSubmit, "onSubmit");
> +		Args.notNull(onError, "onError");
> +
> +		return new AjaxFormSubmitBehavior(eventName)
> +		{
> +			@Override
> +			protected void onSubmit(AjaxRequestTarget target)
> +			{
> +				onSubmit.accept(target);
> +			}
> +
> +			@Override
> +			protected void onError(AjaxRequestTarget target)
> +			{
> +				onError.accept(target);
> +			}
> +		};
> +	}
> +
> +
> +	public static OnChangeAjaxBehavior onChange(WicketConsumer<AjaxRequestTarget> onChange)
> +	{
> +		Args.notNull(onChange, "onChange");
> +
> +		return new OnChangeAjaxBehavior()
> +		{
> +			@Override
> +			protected void onUpdate(AjaxRequestTarget target)
> +			{
> +				onChange.accept(target);
> +			}
> +		};
> +	}
> +
> +	public static OnChangeAjaxBehavior onChange(WicketConsumer<AjaxRequestTarget> onChange,
> +	                                            WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
> +	{
> +		Args.notNull(onChange, "onChange");
> +		Args.notNull(onError, "onError");
> +
> +		return new OnChangeAjaxBehavior()
> +		{
> +			@Override
> +			protected void onUpdate(AjaxRequestTarget target)
> +			{
> +				onChange.accept(target);
> +			}
> +
> +			@Override
> +			protected void onError(AjaxRequestTarget target, RuntimeException e)
> +			{
> +				onError.accept(target, e);
> +			}
> +		};
> +	}
> +
> +	public static <T> AjaxLink<T> ajaxLink(String id, WicketConsumer<AjaxRequestTarget> onClick)
> +	{
> +		Args.notNull(onClick, "onClick");
> +
> +		return new AjaxLink<T>(id)
> +		{
> +			@Override
> +			public void onClick(AjaxRequestTarget target)
> +			{
> +				onClick.accept(target);
> +			}
> +		};
> +	}
> +
> +
> +	public static AjaxButton ajaxButton(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
> +	{
> +		Args.notNull(onSubmit, "onSubmit");
> +
> +		return new AjaxButton(id)
> +		{
> +			@Override
> +			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> +			{
> +				onSubmit.accept(target, form);
> +			}
> +		};
> +	}
> +
> +	public static AjaxButton ajaxButton(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
> +	                                    WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
> +	{
> +		Args.notNull(onSubmit, "onSubmit");
> +		Args.notNull(onError, "onError");
> +
> +		return new AjaxButton(id)
> +		{
> +			@Override
> +			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> +			{
> +				onSubmit.accept(target, form);
> +			}
> +
> +			@Override
> +			protected void onError(AjaxRequestTarget target, Form<?> form)
> +			{
> +				onError.accept(target, form);
> +			}
> +		};
> +	}
> +
> +	public static AjaxCheckBox ajaxCheckBox(String id, WicketConsumer<AjaxRequestTarget> onUpdate)
> +	{
> +		Args.notNull(onUpdate, "onUpdate");
> +
> +		return new AjaxCheckBox(id)
> +		{
> +			@Override
> +			public void onUpdate(AjaxRequestTarget target)
> +			{
> +				onUpdate.accept(target);
> +			}
> +		};
> +	}
> +
> +
> +	public static AjaxSubmitLink ajaxSubmitLink(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
> +	{
> +		Args.notNull(onSubmit, "onSubmit");
> +
> +		return new AjaxSubmitLink(id)
> +		{
> +			@Override
> +			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> +			{
> +				onSubmit.accept(target, form);
> +			}
> +		};
> +	}
> +
> +	public static AjaxSubmitLink ajaxSubmitLink(String id,
> +	                                            WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
> +	                                            WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
> +	{
> +		Args.notNull(onSubmit, "onSubmit");
> +		Args.notNull(onError, "onError");
> +
> +		return new AjaxSubmitLink(id)
> +		{
> +			@Override
> +			public void onSubmit(AjaxRequestTarget target, Form<?> form)
> +			{
> +				onSubmit.accept(target, form);
> +			}
> +
> +			@Override
> +			protected void onError(AjaxRequestTarget target, Form<?> form)
> +			{
> +				onError.accept(target, form);
> +			}
> +		};
> +	}
> +
> +	public static <T> Link<T> link(String id, WicketConsumer<Void> onClick)
> +	{
> +		Args.notNull(onClick, "onClick");
> +
> +		return new Link<T>(id)
> +		{
> +			@Override
> +			public void onClick()
> +			{
> +				onClick.accept((Void)null);
> +			}
> +		};
> +	}
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
> new file mode 100644
> index 0000000..509a6c5
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
> @@ -0,0 +1,32 @@
> +/*
> + * 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.lambdas;
> +
> +import java.io.Serializable;
> +import java.util.function.BiConsumer;
> +
> +/**
> + * A {@link Serializable} {@link BiConsumer}.
> + *
> + * @param <T>
> + *            - the type of the first input to consume
> + * @param <T>
> + *            - the type of the second input to consume
> + */
> +public interface WicketBiConsumer<T, U> extends BiConsumer<T, U>, Serializable
> +{
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
> new file mode 100644
> index 0000000..36404f2
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
> @@ -0,0 +1,30 @@
> +/*
> + * 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.lambdas;
> +
> +import java.io.Serializable;
> +import java.util.function.Consumer;
> +
> +/**
> + * A {@link Serializable} {@link Consumer}.
> + *
> + * @param <T>
> + *            - the type of the input to consume
> + */
> +public interface WicketConsumer<T> extends Consumer<T>, Serializable
> +{
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
> new file mode 100644
> index 0000000..7c6b9ae
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
> @@ -0,0 +1,32 @@
> +/*
> + * 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.lambdas;
> +
> +import java.io.Serializable;
> +import java.util.function.Function;
> +
> +/**
> + * A {@link Serializable} {@link Function}.
> + *
> + * @param <T>
> + *            - the type of the input to the function
> + * @param <R>
> + *            - the type of the result of the function
> + */
> +public interface WicketFunction<T, R> extends Function<T, R>, Serializable
> +{
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketSupplier.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketSupplier.java b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketSupplier.java
> new file mode 100644
> index 0000000..85a4bdb
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketSupplier.java
> @@ -0,0 +1,30 @@
> +/*
> + * 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.lambdas;
> +
> +import java.io.Serializable;
> +import java.util.function.Supplier;
> +
> +/**
> + * A {@link Serializable} {@link Supplier}.
> + *
> + * @param <T>
> + *            - the type of results supplied by this supplier
> + */
> +public interface WicketSupplier<T> extends Supplier<T>, Serializable
> +{
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
> index 10e6396..7a39c06 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
> @@ -20,11 +20,11 @@ import org.apache.wicket.Component;
>   import org.apache.wicket.IGenericComponent;
>   import org.apache.wicket.Page;
>   import org.apache.wicket.WicketRuntimeException;
> +import org.apache.wicket.lambdas.Lambdas;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.markup.ComponentTag;
>   import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.lambda.WicketConsumer;
>   import org.apache.wicket.request.mapper.parameter.PageParameters;
> -import org.apache.wicket.util.lang.Args;
>   
>   /**
>    * Implementation of a hyperlink component. A link can be used with an anchor (&lt;a href...)
> @@ -177,18 +177,9 @@ public abstract class Link<T> extends AbstractLink implements ILinkListener, IGe
>   	 */
>   	public abstract void onClick();
>   
> -	public static <T> Link<T> link(String id, WicketConsumer<Void> onClick)
> +	public static <T> Link<T> onClick(String id, WicketConsumer<Void> onClick)
>   	{
> -		Args.notNull(onClick, "onClick");
> -
> -		return new Link<T>(id)
> -		{
> -			@Override
> -			public void onClick()
> -			{
> -				onClick.accept((Void)null);
> -			}
> -		};
> +		return Lambdas.link(id, onClick);
>   	}
>   
>   	/**
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/Model.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/Model.java b/wicket-core/src/main/java/org/apache/wicket/model/Model.java
> index 271cf8d..ba790e6 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/model/Model.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/model/Model.java
> @@ -24,6 +24,11 @@ import java.util.Map;
>   import java.util.Set;
>   
>   import org.apache.wicket.WicketRuntimeException;
> +import org.apache.wicket.lambdas.WicketConsumer;
> +import org.apache.wicket.lambdas.WicketSupplier;
> +import org.apache.wicket.model.lambda.LambdaModel;
> +import org.apache.wicket.model.lambda.SupplierCachingModel;
> +import org.apache.wicket.model.lambda.SupplierModel;
>   import org.apache.wicket.model.util.CollectionModel;
>   import org.apache.wicket.model.util.ListModel;
>   import org.apache.wicket.model.util.MapModel;
> @@ -170,6 +175,42 @@ public class Model<T extends Serializable> implements IObjectClassAwareModel<T>
>   	}
>   
>   	/**
> +	 * Factory methods for Model which uses type inference to make code shorter. Equivalent to
> +	 * <code>new LambdaModel<TypeOfObject>(getter, setter)</code>.
> +	 *
> +	 * @param <T>
> +	 * @return Model that contains <code>object</code>
> +	 */
> +	public static <T> IModel<T> ofLambdas(WicketSupplier<T> getter, WicketConsumer<T> setter)
> +	{
> +		return new LambdaModel<>(getter, setter);
> +	}
> +
> +	/**
> +	 * Factory methods for Model which uses type inference to make code shorter. Equivalent to
> +	 * <code>new SupplierModel<TypeOfObject>(getter)</code>.
> +	 *
> +	 * @param <T>
> +	 * @return Model that contains <code>object</code>
> +	 */
> +	public static <T> IModel<T> readOnly(WicketSupplier<T> getter)
> +	{
> +		return new SupplierModel<>(getter);
> +	}
> +
> +	/**
> +	 * Factory methods for Model which uses type inference to make code shorter. Equivalent to
> +	 * <code>new SupplierCachingModel<TypeOfObject>(getter)</code>.
> +	 *
> +	 * @param <T>
> +	 * @return Model that contains <code>object</code>
> +	 */
> +	public static <T> IModel<T> cachingReadOnly(WicketSupplier<T> getter)
> +	{
> +		return new SupplierCachingModel<>(getter);
> +	}
> +
> +	/**
>   	 * @see org.apache.wicket.model.IModel#getObject()
>   	 */
>   	@Override
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/lambda/LambdaModel.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/LambdaModel.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/LambdaModel.java
> index 2620680..6b1b3ea 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/LambdaModel.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/model/lambda/LambdaModel.java
> @@ -18,6 +18,8 @@ package org.apache.wicket.model.lambda;
>   
>   import java.util.Objects;
>   
> +import org.apache.wicket.lambdas.WicketConsumer;
> +import org.apache.wicket.lambdas.WicketSupplier;
>   import org.apache.wicket.model.IModel;
>   import org.apache.wicket.util.lang.Args;
>   
> @@ -50,11 +52,6 @@ public class LambdaModel<T> implements IModel<T>
>   		this.setter = Args.notNull(setter, "setter");
>   	}
>   
> -	public static <T> LambdaModel<T> of(WicketSupplier<T> getter, WicketConsumer<T> setter)
> -	{
> -		return new LambdaModel<>(getter, setter);
> -	}
> -
>   	@Override
>   	public T getObject()
>   	{
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierCachingModel.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierCachingModel.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierCachingModel.java
> index 70f8090..e26dcbd 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierCachingModel.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierCachingModel.java
> @@ -18,6 +18,7 @@ package org.apache.wicket.model.lambda;
>   
>   import java.util.Objects;
>   
> +import org.apache.wicket.lambdas.WicketSupplier;
>   import org.apache.wicket.model.LoadableDetachableModel;
>   import org.apache.wicket.util.lang.Args;
>   
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
> index 9b4d0bd..4a8b77c 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
> @@ -18,6 +18,7 @@ package org.apache.wicket.model.lambda;
>   
>   import java.util.Objects;
>   
> +import org.apache.wicket.lambdas.WicketSupplier;
>   import org.apache.wicket.model.AbstractReadOnlyModel;
>   import org.apache.wicket.util.lang.Args;
>   
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketBiConsumer.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketBiConsumer.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketBiConsumer.java
> deleted file mode 100644
> index 20d3ace..0000000
> --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketBiConsumer.java
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/*
> - * 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.model.lambda;
> -
> -import java.io.Serializable;
> -import java.util.function.BiConsumer;
> -
> -/**
> - * A {@link Serializable} {@link BiConsumer}.
> - *
> - * @param <T>
> - *            - the type of the first input to consume
> - * @param <T>
> - *            - the type of the second input to consume
> - */
> -public interface WicketBiConsumer<T, U> extends BiConsumer<T, U>, Serializable
> -{
> -}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketConsumer.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketConsumer.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketConsumer.java
> deleted file mode 100644
> index fd67e32..0000000
> --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketConsumer.java
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -/*
> - * 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.model.lambda;
> -
> -import java.io.Serializable;
> -import java.util.function.Consumer;
> -
> -/**
> - * A {@link Serializable} {@link Consumer}.
> - *
> - * @param <T>
> - *            - the type of the input to consume
> - */
> -public interface WicketConsumer<T> extends Consumer<T>, Serializable
> -{
> -}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketFunction.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketFunction.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketFunction.java
> deleted file mode 100644
> index 6c1fcec..0000000
> --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketFunction.java
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/*
> - * 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.model.lambda;
> -
> -import java.io.Serializable;
> -import java.util.function.Function;
> -
> -/**
> - * A {@link Serializable} {@link Function}.
> - *
> - * @param <T>
> - *            - the type of the input to the function
> - * @param <R>
> - *            - the type of the result of the function
> - */
> -public interface WicketFunction<T, R> extends Function<T, R>, Serializable
> -{
> -}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketSupplier.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketSupplier.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketSupplier.java
> deleted file mode 100644
> index d876d77..0000000
> --- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/WicketSupplier.java
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -/*
> - * 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.model.lambda;
> -
> -import java.io.Serializable;
> -import java.util.function.Supplier;
> -
> -/**
> - * A {@link Serializable} {@link Supplier}.
> - *
> - * @param <T>
> - *            - the type of results supplied by this supplier
> - */
> -public interface WicketSupplier<T> extends Supplier<T>, Serializable
> -{
> -}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/test/java/org/apache/wicket/model/lambda/LambdaModelTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/model/lambda/LambdaModelTest.java b/wicket-core/src/test/java/org/apache/wicket/model/lambda/LambdaModelTest.java
> index 8bf21ae..9f8d2b4 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/model/lambda/LambdaModelTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/model/lambda/LambdaModelTest.java
> @@ -22,6 +22,8 @@ import static org.hamcrest.Matchers.nullValue;
>   import static org.junit.Assert.*;
>   
>   import org.apache.wicket.core.util.lang.WicketObjects;
> +import org.apache.wicket.lambdas.WicketConsumer;
> +import org.apache.wicket.lambdas.WicketSupplier;
>   import org.apache.wicket.model.IModel;
>   import org.junit.Test;
>   
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierCachingModelTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierCachingModelTest.java b/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierCachingModelTest.java
> index dc2208d..e2b95e4 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierCachingModelTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierCachingModelTest.java
> @@ -25,6 +25,7 @@ import static org.mockito.Mockito.verify;
>   import static org.mockito.Mockito.when;
>   
>   import org.apache.wicket.core.util.lang.WicketObjects;
> +import org.apache.wicket.lambdas.WicketSupplier;
>   import org.apache.wicket.model.IModel;
>   import org.junit.Test;
>   
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierModelTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierModelTest.java b/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierModelTest.java
> index 384dd89..f0ecc02 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierModelTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/model/lambda/SupplierModelTest.java
> @@ -25,6 +25,7 @@ import static org.mockito.Mockito.verify;
>   import static org.mockito.Mockito.when;
>   
>   import org.apache.wicket.core.util.lang.WicketObjects;
> +import org.apache.wicket.lambdas.WicketSupplier;
>   import org.apache.wicket.model.IModel;
>   import org.junit.Test;
>   
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxButton.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxButton.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxButton.java
> index 39da031..7d91e4c 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxButton.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxButton.java
> @@ -21,7 +21,7 @@ import org.apache.wicket.ajax.IAjaxIndicatorAware;
>   import org.apache.wicket.ajax.markup.html.form.AjaxButton;
>   import org.apache.wicket.markup.html.form.Form;
>   import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.lambda.WicketBiConsumer;
> +import org.apache.wicket.lambdas.WicketBiConsumer;
>   import org.apache.wicket.util.lang.Args;
>   
>   /**
> @@ -96,7 +96,7 @@ public abstract class IndicatingAjaxButton extends AjaxButton implements IAjaxIn
>   	}
>   
>   
> -	public static IndicatingAjaxButton indicatingAjaxButton(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
> +	public static IndicatingAjaxButton onSubmit(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>   	{
>   		Args.notNull(onSubmit, "onSubmit");
>   
> @@ -110,8 +110,9 @@ public abstract class IndicatingAjaxButton extends AjaxButton implements IAjaxIn
>   		};
>   	}
>   
> -	public static IndicatingAjaxButton indicatingAjaxButton(String id, WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
> -	                                  WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
> +	public static IndicatingAjaxButton onSubmit(String id,
> +	                                            WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
> +	                                            WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>   	{
>   		Args.notNull(onSubmit, "onSubmit");
>   		Args.notNull(onError, "onError");
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxLink.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxLink.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxLink.java
> index dabd29a..59c4fcc 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxLink.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxLink.java
> @@ -20,7 +20,7 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
>   import org.apache.wicket.ajax.IAjaxIndicatorAware;
>   import org.apache.wicket.ajax.markup.html.AjaxLink;
>   import org.apache.wicket.model.IModel;
> -import org.apache.wicket.model.lambda.WicketConsumer;
> +import org.apache.wicket.lambdas.WicketConsumer;
>   import org.apache.wicket.util.lang.Args;
>   
>   /**
>


Re: wicket git commit: Introduce Lambdas class - a class with factory methods for creating components and behaviors by using lambdas for their callback methods

Posted by Sven Meier <sv...@meiers.net>.
Hi,

>I've moved them in one place because all those methods share the same purpose.
>
>I don't mind to move them back though.

well, I'll do some testing with it. Let's see how to use these methods.

Have fun
Sven


On 12.03.2016 23:29, Martin Grigorov wrote:
> On Sat, Mar 12, 2016 at 10:46 PM, Sven Meier <sv...@meiers.net> wrote:
>
>> Hi,
>>
>>> org.apache.wicket.lambdas
>> IMHO org.apache.wicket.lambda (not the singular) would be better: it
>> aligns with org.apache.wicket.model.lambda and follows other package
>> namings.
>>
> Done!
>
>
>>> Lambdas
>> What's the purpose of this class - is it supposed to ease static imports
>> in an IDE?
>>
> Yes, static imports.
> One can statically import Lambdas.ajaxLink or Lambdas.* and then use it
> like:
>
> add(ajaxLink("someId", this::onSomething));
>
> The static method in AjaxLink is named "onClick" though.
> The idea here is:
> add(AjaxLink.onEvent("someId", this::onSomething))
>
>
>> I'd rather keep all those implementations in the relevant classes, instead
>> of this single location. If you see the need for such a 'collector', we
>> could reverse the delegation:
>>
> I've moved them in one place because all those methods share the same
> purpose.
> I don't mind to move them back though.
>
>
>> public class Lambdas {
>>
>>      public static AjaxSelfUpdatingTimerBehavior onSelfUpdate(Duration
>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>>      {
>>          return AjaxSelfUpdatingTimerBehavior.onSelfUpdate(interval,
>> onTimer);
>>      }
>>
>> }
>>
>> In this case I think a plural makes sense though.
>>
>> Regards
>> Sven
>>
> I also want to check out Martijn's Lambdas class that he proposed a while
> back but didn't commit it due to some problems in javac vs. Eclipse
> compiler.
>
> Thanks!
>
>
>>
>> On 12.03.2016 21:51, mgrigorov@apache.org wrote:
>>
>>> Repository: wicket
>>> Updated Branches:
>>>     refs/heads/static-factories-for-lambdas 229fee822 -> d3bee7507
>>>
>>>
>>> Introduce Lambdas class - a class with factory methods for creating
>>> components and behaviors by using lambdas for their callback methods
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
>>> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d3bee750
>>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d3bee750
>>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d3bee750
>>>
>>> Branch: refs/heads/static-factories-for-lambdas
>>> Commit: d3bee7507e14e7a1dc8ba9e9a0c77e02bffacda6
>>> Parents: 229fee8
>>> Author: Martin Tzvetanov Grigorov <mg...@apache.org>
>>> Authored: Sat Mar 12 21:50:13 2016 +0100
>>> Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
>>> Committed: Sat Mar 12 21:50:13 2016 +0100
>>>
>>> ----------------------------------------------------------------------
>>>    .../wicket/ajax/AbstractAjaxTimerBehavior.java  |  15 +-
>>>    .../wicket/ajax/AjaxClientInfoBehavior.java     |  15 +-
>>>    .../apache/wicket/ajax/AjaxEventBehavior.java   |  14 +-
>>>    .../ajax/AjaxNewWindowNotifyingBehavior.java    |  24 +-
>>>    .../ajax/AjaxSelfUpdatingTimerBehavior.java     |  15 +-
>>>    ...AjaxFormChoiceComponentUpdatingBehavior.java |  34 +-
>>>    .../form/AjaxFormComponentUpdatingBehavior.java |  35 +-
>>>    .../ajax/form/AjaxFormSubmitBehavior.java       |  33 +-
>>>    .../wicket/ajax/form/OnChangeAjaxBehavior.java  |  35 +-
>>>    .../ajax/markup/html/AjaxFallbackLink.java      |   2 -
>>>    .../wicket/ajax/markup/html/AjaxLink.java       |  17 +-
>>>    .../ajax/markup/html/form/AjaxButton.java       |  40 +-
>>>    .../ajax/markup/html/form/AjaxCheckBox.java     |  17 +-
>>>    .../ajax/markup/html/form/AjaxSubmitLink.java   |  33 +-
>>>    .../java/org/apache/wicket/lambdas/Lambdas.java | 366
>>> +++++++++++++++++++
>>>    .../apache/wicket/lambdas/WicketBiConsumer.java |  32 ++
>>>    .../apache/wicket/lambdas/WicketConsumer.java   |  30 ++
>>>    .../apache/wicket/lambdas/WicketFunction.java   |  32 ++
>>>    .../apache/wicket/lambdas/WicketSupplier.java   |  30 ++
>>>    .../apache/wicket/markup/html/link/Link.java    |  17 +-
>>>    .../java/org/apache/wicket/model/Model.java     |  41 +++
>>>    .../apache/wicket/model/lambda/LambdaModel.java |   7 +-
>>>    .../model/lambda/SupplierCachingModel.java      |   1 +
>>>    .../wicket/model/lambda/SupplierModel.java      |   1 +
>>>    .../wicket/model/lambda/WicketBiConsumer.java   |  32 --
>>>    .../wicket/model/lambda/WicketConsumer.java     |  30 --
>>>    .../wicket/model/lambda/WicketFunction.java     |  32 --
>>>    .../wicket/model/lambda/WicketSupplier.java     |  30 --
>>>    .../wicket/model/lambda/LambdaModelTest.java    |   2 +
>>>    .../model/lambda/SupplierCachingModelTest.java  |   1 +
>>>    .../wicket/model/lambda/SupplierModelTest.java  |   1 +
>>>    .../ajax/markup/html/IndicatingAjaxButton.java  |   9 +-
>>>    .../ajax/markup/html/IndicatingAjaxLink.java    |   2 +-
>>>    33 files changed, 603 insertions(+), 422 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>>> index aef5591..4a3609c 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>>> @@ -19,10 +19,10 @@ package org.apache.wicket.ajax;
>>>    import org.apache.wicket.Component;
>>>    import org.apache.wicket.Page;
>>>    import
>>> org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.head.IHeaderResponse;
>>>    import org.apache.wicket.markup.head.OnLoadHeaderItem;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>    import org.apache.wicket.util.time.Duration;
>>>      /**
>>> @@ -165,16 +165,7 @@ public abstract class AbstractAjaxTimerBehavior
>>> extends AbstractDefaultAjaxBehav
>>>          public static AbstractAjaxTimerBehavior onTimer(Duration
>>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>>>          {
>>> -               Args.notNull(onTimer, "onTimer");
>>> -
>>> -               return new AbstractAjaxTimerBehavior(interval)
>>> -               {
>>> -                       @Override
>>> -                       protected void onTimer(AjaxRequestTarget target)
>>> -                       {
>>> -                               onTimer.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onTimer(interval, onTimer);
>>>          }
>>>          /**
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>>> index 22c9316..bd7c954 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>>> @@ -19,15 +19,15 @@ package org.apache.wicket.ajax;
>>>    import org.apache.wicket.Component;
>>>    import org.apache.wicket.Session;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>>    import org.apache.wicket.markup.head.IHeaderResponse;
>>>    import org.apache.wicket.markup.head.JavaScriptHeaderItem;
>>>    import org.apache.wicket.markup.html.pages.BrowserInfoForm;
>>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>>    import org.apache.wicket.protocol.http.ClientProperties;
>>>    import org.apache.wicket.protocol.http.request.WebClientInfo;
>>>    import org.apache.wicket.request.IRequestParameters;
>>>    import org.apache.wicket.request.cycle.RequestCycle;
>>> -import org.apache.wicket.util.lang.Args;
>>>    import org.apache.wicket.util.time.Duration;
>>>      /**
>>> @@ -122,16 +122,7 @@ public class AjaxClientInfoBehavior extends
>>> AbstractAjaxTimerBehavior
>>>          public static AjaxClientInfoBehavior
>>> onClientInfo(WicketBiConsumer<AjaxRequestTarget, WebClientInfo>
>>> onClientInfo)
>>>          {
>>> -               Args.notNull(onClientInfo, "onClientInfo");
>>> -
>>> -               return new AjaxClientInfoBehavior()
>>> -               {
>>> -                       @Override
>>> -                       protected void onClientInfo(AjaxRequestTarget
>>> target, WebClientInfo clientInfo)
>>> -                       {
>>> -                               onClientInfo.accept(target, clientInfo);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onClientInfo(onClientInfo);
>>>          }
>>>          @Override
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
>>> ----------------------------------------------------------------------
>>> 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 7a11b2d..fa49035 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
>>> @@ -21,9 +21,10 @@ import java.util.List;
>>>      import org.apache.wicket.Component;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.head.IHeaderResponse;
>>>    import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>>    import org.apache.wicket.util.lang.Args;
>>>    import org.apache.wicket.util.lang.Checks;
>>>    import org.apache.wicket.util.string.Strings;
>>> @@ -166,15 +167,6 @@ public abstract class AjaxEventBehavior extends
>>> AbstractDefaultAjaxBehavior
>>>          public static AjaxEventBehavior onEvent(String eventName,
>>> WicketConsumer<AjaxRequestTarget> onEvent)
>>>          {
>>> -               Args.notNull(onEvent, "onEvent");
>>> -
>>> -               return new AjaxEventBehavior(eventName)
>>> -               {
>>> -                       @Override
>>> -                       protected void onEvent(AjaxRequestTarget target)
>>> -                       {
>>> -                               onEvent.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onEvent(eventName, onEvent);
>>>          }
>>>    }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>>> index 932d54e..130666b 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>>> @@ -21,16 +21,13 @@ import java.util.UUID;
>>>    import org.apache.wicket.Component;
>>>    import org.apache.wicket.WicketRuntimeException;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    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.markup.html.WebPage;
>>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.protocol.http.request.WebClientInfo;
>>> -import org.apache.wicket.util.lang.Args;
>>>    import org.apache.wicket.util.string.StringValue;
>>> -import org.apache.wicket.util.string.Strings;
>>>      /**
>>>     * An Ajax behavior that notifies when a new browser window/tab is
>>> opened with
>>> @@ -133,21 +130,6 @@ public abstract class AjaxNewWindowNotifyingBehavior
>>> extends AbstractDefaultAjax
>>>          public static AjaxNewWindowNotifyingBehavior onNewWindow(String
>>> windowName, WicketConsumer<AjaxRequestTarget> onNewWindow)
>>>          {
>>> -               Args.notNull(onNewWindow, "onNewWindow");
>>> -
>>> -               if (Strings.isEmpty(windowName))
>>> -               {
>>> -                       windowName = UUID.randomUUID().toString();
>>> -               }
>>> -
>>> -               return new AjaxNewWindowNotifyingBehavior(windowName)
>>> -               {
>>> -                       @Override
>>> -                       protected void onNewWindow(AjaxRequestTarget
>>> target)
>>> -                       {
>>> -                               onNewWindow.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onNewWindow(windowName, onNewWindow);
>>>          }
>>> -
>>>    }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>>> index 479a6b9..d615ae5 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>>> @@ -16,8 +16,8 @@
>>>     */
>>>    package org.apache.wicket.ajax;
>>>    -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.util.time.Duration;
>>>      /**
>>> @@ -67,15 +67,6 @@ public class AjaxSelfUpdatingTimerBehavior extends
>>> AbstractAjaxTimerBehavior
>>>          public static AbstractAjaxTimerBehavior onSelfUpdate(Duration
>>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>>>          {
>>> -               Args.notNull(onTimer, "onTimer");
>>> -
>>> -               return new AjaxSelfUpdatingTimerBehavior(interval)
>>> -               {
>>> -                       @Override
>>> -                       protected void
>>> onPostProcessTarget(AjaxRequestTarget target)
>>> -                       {
>>> -                               onTimer.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onSelfUpdate(interval, onTimer);
>>>          }
>>>    }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>>> index e5bc69a..19915d6 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>>> @@ -21,14 +21,14 @@ import org.apache.wicket.WicketRuntimeException;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxCallListener;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice;
>>>    import org.apache.wicket.markup.html.form.CheckGroup;
>>>    import org.apache.wicket.markup.html.form.FormComponent;
>>>    import org.apache.wicket.markup.html.form.RadioChoice;
>>>    import org.apache.wicket.markup.html.form.RadioGroup;
>>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>      /**
>>>     * This is a Ajax Component Update Behavior that is meant for
>>> choices/groups that are not one
>>> @@ -114,36 +114,12 @@ public abstract class
>>> AjaxFormChoiceComponentUpdatingBehavior extends
>>>                          (component instanceof CheckGroup);
>>>          }
>>>    -
>>>          public static AjaxFormChoiceComponentUpdatingBehavior
>>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice) {
>>> -               Args.notNull(onUpdateChoice, "onUpdateChoice");
>>> -               return new AjaxFormChoiceComponentUpdatingBehavior()
>>> -               {
>>> -                       @Override
>>> -                       protected void onUpdate(AjaxRequestTarget target)
>>> -                       {
>>> -                               onUpdateChoice.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onUpdateChoice(onUpdateChoice);
>>>          }
>>>          public static AjaxFormChoiceComponentUpdatingBehavior
>>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice,
>>>
>>>   WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError) {
>>> -               Args.notNull(onUpdateChoice, "onUpdateChoice");
>>> -               Args.notNull(onError, "onError");
>>> -               return new AjaxFormChoiceComponentUpdatingBehavior()
>>> -               {
>>> -                       @Override
>>> -                       protected void onUpdate(AjaxRequestTarget target)
>>> -                       {
>>> -                               onUpdateChoice.accept(target);
>>> -                       }
>>> -
>>> -                       @Override
>>> -                       protected void onError(AjaxRequestTarget target,
>>> RuntimeException e)
>>> -                       {
>>> -                               onError.accept(target, e);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onUpdateChoice(onUpdateChoice, onError);
>>>          }
>>>    }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/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 97b31a3..490afd6 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
>>> @@ -23,11 +23,11 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.html.form.FormComponent;
>>>    import org.apache.wicket.markup.html.form.validation.IFormValidator;
>>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>    import org.slf4j.Logger;
>>>    import org.slf4j.LoggerFactory;
>>>    @@ -205,39 +205,14 @@ public abstract class
>>> AjaxFormComponentUpdatingBehavior extends AjaxEventBehavio
>>>          public static AjaxFormComponentUpdatingBehavior onUpdate(String
>>> eventName, WicketConsumer<AjaxRequestTarget> onUpdate)
>>>          {
>>> -               Args.notNull(onUpdate, "onUpdate");
>>> -
>>> -               return new AjaxFormComponentUpdatingBehavior(eventName)
>>> -               {
>>> -                       @Override
>>> -                       protected void onUpdate(AjaxRequestTarget target)
>>> -                       {
>>> -                               onUpdate.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onUpdate(eventName, onUpdate);
>>>          }
>>>          public static AjaxFormComponentUpdatingBehavior onUpdate(String
>>> eventName,
>>>
>>>   WicketConsumer<AjaxRequestTarget> onUpdate,
>>>
>>>   WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>>>          {
>>> -               Args.notNull(onUpdate, "onUpdate");
>>> -               Args.notNull(onError, "onError");
>>> -
>>> -               return new AjaxFormComponentUpdatingBehavior(eventName)
>>> -               {
>>> -                       @Override
>>> -                       protected void onUpdate(AjaxRequestTarget target)
>>> -                       {
>>> -                               onUpdate.accept(target);
>>> -                       }
>>> -
>>> -                       @Override
>>> -                       protected void onError(AjaxRequestTarget target,
>>> RuntimeException e)
>>> -                       {
>>> -                               onError.accept(target, e);
>>> -                       }
>>> -               };
>>> +               return onUpdate(eventName, onUpdate, onError);
>>>          }
>>>          /**
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>>> index 7b7c4a0..7011481 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>>> @@ -21,12 +21,12 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.html.form.Button;
>>>    import org.apache.wicket.markup.html.form.Form;
>>>    import org.apache.wicket.markup.html.form.IFormSubmitter;
>>>    import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>      /**
>>>     * Ajax event behavior that submits a form via ajax when the event it
>>> is attached to, is invoked.
>>> @@ -272,37 +272,12 @@ public abstract class AjaxFormSubmitBehavior
>>> extends AjaxEventBehavior
>>>          public static AjaxFormSubmitBehavior onSubmit(String eventName,
>>> WicketConsumer<AjaxRequestTarget> onSubmit)
>>>          {
>>> -               Args.notNull(onSubmit, "onSubmit");
>>> -
>>> -               return new AjaxFormSubmitBehavior(eventName)
>>> -               {
>>> -                       @Override
>>> -                       protected void onSubmit(AjaxRequestTarget target)
>>> -                       {
>>> -                               onSubmit.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onSubmit(eventName, onSubmit);
>>>          }
>>>          public static AjaxFormSubmitBehavior onSubmit(String eventName,
>>>
>>> WicketConsumer<AjaxRequestTarget> onSubmit,
>>>
>>> WicketConsumer<AjaxRequestTarget> onError) {
>>> -               Args.notNull(onSubmit, "onSubmit");
>>> -               Args.notNull(onError, "onError");
>>> -
>>> -               return new AjaxFormSubmitBehavior(eventName)
>>> -               {
>>> -                       @Override
>>> -                       protected void onSubmit(AjaxRequestTarget target)
>>> -                       {
>>> -                               onSubmit.accept(target);
>>> -                       }
>>> -
>>> -                       @Override
>>> -                       protected void onError(AjaxRequestTarget target)
>>> -                       {
>>> -                               onError.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onSubmit(eventName, onSubmit, onError);
>>>          }
>>>    }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>>> index e1f2d9b..01c07a8 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>>> @@ -19,12 +19,12 @@ package org.apache.wicket.ajax.form;
>>>    import org.apache.wicket.Component;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.html.form.FormComponent;
>>>    import org.apache.wicket.markup.html.form.TextArea;
>>>    import org.apache.wicket.markup.html.form.TextField;
>>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>      /**
>>>     * A behavior that updates the hosting {@link FormComponent} via Ajax
>>> when value of the component is
>>> @@ -80,38 +80,13 @@ public abstract class OnChangeAjaxBehavior extends
>>> AjaxFormComponentUpdatingBeha
>>>          public static OnChangeAjaxBehavior
>>> onChange(WicketConsumer<AjaxRequestTarget> onChange)
>>>          {
>>> -               Args.notNull(onChange, "onChange");
>>> -
>>> -               return new OnChangeAjaxBehavior()
>>> -               {
>>> -                       @Override
>>> -                       protected void onUpdate(AjaxRequestTarget target)
>>> -                       {
>>> -                               onChange.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onChange(onChange);
>>>          }
>>>          public static OnChangeAjaxBehavior
>>> onChange(WicketConsumer<AjaxRequestTarget> onChange,
>>>
>>> WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>>>          {
>>> -               Args.notNull(onChange, "onChange");
>>> -               Args.notNull(onError, "onError");
>>> -
>>> -               return new OnChangeAjaxBehavior()
>>> -               {
>>> -                       @Override
>>> -                       protected void onUpdate(AjaxRequestTarget target)
>>> -                       {
>>> -                               onChange.accept(target);
>>> -                       }
>>> -
>>> -                       @Override
>>> -                       protected void onError(AjaxRequestTarget target,
>>> RuntimeException e)
>>> -                       {
>>> -                               onError.accept(target, e);
>>> -                       }
>>> -               };
>>> +               return Lambdas.onChange(onChange, onError);
>>>          }
>>>      }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>>> index 29ccb99..d4f95a3 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>>> @@ -24,8 +24,6 @@ import
>>> org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>>    import org.apache.wicket.markup.ComponentTag;
>>>    import org.apache.wicket.markup.html.link.Link;
>>>    import org.apache.wicket.model.IModel;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>      /**
>>>     * An ajax link that will degrade to a normal request if ajax is not
>>> available or javascript is
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>>> index bf3d4d5..1907f58 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>>> @@ -20,11 +20,11 @@ import org.apache.wicket.IGenericComponent;
>>>    import org.apache.wicket.ajax.AjaxEventBehavior;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.ComponentTag;
>>>    import org.apache.wicket.markup.html.link.AbstractLink;
>>>    import org.apache.wicket.model.IModel;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>      /**
>>>     * A component that allows a trigger request to be triggered via html
>>> anchor tag
>>> @@ -135,17 +135,8 @@ public abstract class AjaxLink<T> extends
>>> AbstractLink implements IAjaxLink, IGe
>>>          @Override
>>>          public abstract void onClick(final AjaxRequestTarget target);
>>>    -     public static <T> AjaxLink<T> ajaxLink(String id,
>>> WicketConsumer<AjaxRequestTarget> onClick)
>>> +       public static <T> AjaxLink<T> onClick(String id,
>>> WicketConsumer<AjaxRequestTarget> onClick)
>>>          {
>>> -               Args.notNull(onClick, "onClick");
>>> -
>>> -               return new AjaxLink<T>(id)
>>> -               {
>>> -                       @Override
>>> -                       public void onClick(AjaxRequestTarget target)
>>> -                       {
>>> -                               onClick.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.ajaxLink(id, onClick);
>>>          }
>>>    }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>>> index ce2fcf7..9d3732f 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>>> @@ -19,12 +19,12 @@ package org.apache.wicket.ajax.markup.html.form;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>>    import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>>    import org.apache.wicket.markup.ComponentTag;
>>>    import org.apache.wicket.markup.html.form.Button;
>>>    import org.apache.wicket.markup.html.form.Form;
>>>    import org.apache.wicket.model.IModel;
>>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>    import org.slf4j.Logger;
>>>    import org.slf4j.LoggerFactory;
>>>    @@ -219,40 +219,16 @@ public abstract class AjaxButton extends Button
>>>          {
>>>          }
>>>    -     public static AjaxButton ajaxButton(String id,
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>>> +       public static AjaxButton onSubmit(String id,
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>>>          {
>>> -               Args.notNull(onSubmit, "onSubmit");
>>> -
>>> -               return new AjaxButton(id)
>>> -               {
>>> -                       @Override
>>> -                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> -                       {
>>> -                               onSubmit.accept(target, form);
>>> -                       }
>>> -               };
>>> +               return Lambdas.ajaxButton(id, onSubmit);
>>>          }
>>>    -     public static AjaxButton ajaxButton(String id,
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>>> -
>>>   WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>>> +       public static AjaxButton onSubmit(String id,
>>> +
>>>   WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>>> +
>>>   WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>>>          {
>>> -               Args.notNull(onSubmit, "onSubmit");
>>> -               Args.notNull(onError, "onError");
>>> -
>>> -               return new AjaxButton(id)
>>> -               {
>>> -                       @Override
>>> -                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> -                       {
>>> -                               onSubmit.accept(target, form);
>>> -                       }
>>> -
>>> -                       @Override
>>> -                       protected void onError(AjaxRequestTarget target,
>>> Form<?> form)
>>> -                       {
>>> -                               onError.accept(target, form);
>>> -                       }
>>> -               };
>>> +               return Lambdas.ajaxButton(id, onSubmit, onError);
>>>          }
>>>          /**
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>>> index 54e8b3d..5dba68e 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>>> @@ -19,10 +19,10 @@ package org.apache.wicket.ajax.markup.html.form;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>>    import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketConsumer;
>>>    import org.apache.wicket.markup.html.form.CheckBox;
>>>    import org.apache.wicket.model.IModel;
>>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>      /**
>>>     * A CheckBox which is updated via ajax when the user changes its value
>>> @@ -92,17 +92,8 @@ public abstract class AjaxCheckBox extends CheckBox
>>>           */
>>>          protected abstract void onUpdate(AjaxRequestTarget target);
>>>    -     public static AjaxCheckBox ajaxCheckBox(String id,
>>> WicketConsumer<AjaxRequestTarget> onUpdate)
>>> +       public static AjaxCheckBox onUpdate(String id,
>>> WicketConsumer<AjaxRequestTarget> onUpdate)
>>>          {
>>> -               Args.notNull(onUpdate, "onUpdate");
>>> -
>>> -               return new AjaxCheckBox(id)
>>> -               {
>>> -                       @Override
>>> -                       public void onUpdate(AjaxRequestTarget target)
>>> -                       {
>>> -                               onUpdate.accept(target);
>>> -                       }
>>> -               };
>>> +               return Lambdas.ajaxCheckBox(id, onUpdate);
>>>          }
>>>    }
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>>> index f369bf6..552f64c 100644
>>> ---
>>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>>> @@ -19,11 +19,11 @@ package org.apache.wicket.ajax.markup.html.form;
>>>    import org.apache.wicket.ajax.AjaxRequestTarget;
>>>    import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>>    import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
>>> +import org.apache.wicket.lambdas.Lambdas;
>>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>>    import org.apache.wicket.markup.ComponentTag;
>>>    import org.apache.wicket.markup.html.form.AbstractSubmitLink;
>>>    import org.apache.wicket.markup.html.form.Form;
>>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>> -import org.apache.wicket.util.lang.Args;
>>>    import org.slf4j.Logger;
>>>    import org.slf4j.LoggerFactory;
>>>    @@ -138,39 +138,14 @@ public abstract class AjaxSubmitLink extends
>>> AbstractSubmitLink
>>>          public static AjaxSubmitLink ajaxSubmitLink(String id,
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>>>          {
>>> -               Args.notNull(onSubmit, "onSubmit");
>>> -
>>> -               return new AjaxSubmitLink(id)
>>> -               {
>>> -                       @Override
>>> -                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> -                       {
>>> -                               onSubmit.accept(target, form);
>>> -                       }
>>> -               };
>>> +               return Lambdas.ajaxSubmitLink(id, onSubmit);
>>>          }
>>>          public static AjaxSubmitLink ajaxSubmitLink(String id,
>>>
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>>>
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>>>          {
>>> -               Args.notNull(onSubmit, "onSubmit");
>>> -               Args.notNull(onError, "onError");
>>> -
>>> -               return new AjaxSubmitLink(id)
>>> -               {
>>> -                       @Override
>>> -                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> -                       {
>>> -                               onSubmit.accept(target, form);
>>> -                       }
>>> -
>>> -                       @Override
>>> -                       protected void onError(AjaxRequestTarget target,
>>> Form<?> form)
>>> -                       {
>>> -                               onError.accept(target, form);
>>> -                       }
>>> -               };
>>> +               return Lambdas.ajaxSubmitLink(id, onSubmit, onError);
>>>          }
>>>          protected void updateAjaxAttributes(AjaxRequestAttributes
>>> attributes)
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>>> new file mode 100644
>>> index 0000000..0397706
>>> --- /dev/null
>>> +++ b/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>>> @@ -0,0 +1,366 @@
>>> +package org.apache.wicket.lambdas;
>>> +
>>> +import java.util.UUID;
>>> +
>>> +import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
>>> +import org.apache.wicket.ajax.AjaxClientInfoBehavior;
>>> +import org.apache.wicket.ajax.AjaxEventBehavior;
>>> +import org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior;
>>> +import org.apache.wicket.ajax.AjaxRequestTarget;
>>> +import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
>>> +import
>>> org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
>>> +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
>>> +import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
>>> +import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
>>> +import org.apache.wicket.ajax.markup.html.AjaxLink;
>>> +import org.apache.wicket.ajax.markup.html.form.AjaxButton;
>>> +import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
>>> +import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
>>> +import org.apache.wicket.markup.html.form.Form;
>>> +import org.apache.wicket.markup.html.link.Link;
>>> +import org.apache.wicket.protocol.http.request.WebClientInfo;
>>> +import org.apache.wicket.util.lang.Args;
>>> +import org.apache.wicket.util.string.Strings;
>>> +import org.apache.wicket.util.time.Duration;
>>> +
>>> +/**
>>> + *
>>> + */
>>> +public class Lambdas
>>> +{
>>> +       public static AbstractAjaxTimerBehavior onTimer(Duration
>>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>>> +       {
>>> +               Args.notNull(onTimer, "onTimer");
>>> +
>>> +               return new AbstractAjaxTimerBehavior(interval)
>>> +               {
>>> +                       @Override
>>> +                       protected void onTimer(AjaxRequestTarget target)
>>> +                       {
>>> +                               onTimer.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxClientInfoBehavior
>>> onClientInfo(WicketBiConsumer<AjaxRequestTarget, WebClientInfo>
>>> onClientInfo)
>>> +       {
>>> +               Args.notNull(onClientInfo, "onClientInfo");
>>> +
>>> +               return new AjaxClientInfoBehavior()
>>> +               {
>>> +                       @Override
>>> +                       protected void onClientInfo(AjaxRequestTarget
>>> target, WebClientInfo clientInfo)
>>> +                       {
>>> +                               onClientInfo.accept(target, clientInfo);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxEventBehavior onEvent(String eventName,
>>> WicketConsumer<AjaxRequestTarget> onEvent)
>>> +       {
>>> +               Args.notNull(onEvent, "onEvent");
>>> +
>>> +               return new AjaxEventBehavior(eventName)
>>> +               {
>>> +                       @Override
>>> +                       protected void onEvent(AjaxRequestTarget target)
>>> +                       {
>>> +                               onEvent.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxNewWindowNotifyingBehavior onNewWindow(String
>>> windowName, WicketConsumer<AjaxRequestTarget> onNewWindow)
>>> +       {
>>> +               Args.notNull(onNewWindow, "onNewWindow");
>>> +
>>> +               if (Strings.isEmpty(windowName))
>>> +               {
>>> +                       windowName = UUID.randomUUID().toString();
>>> +               }
>>> +
>>> +               return new AjaxNewWindowNotifyingBehavior(windowName)
>>> +               {
>>> +                       @Override
>>> +                       protected void onNewWindow(AjaxRequestTarget
>>> target)
>>> +                       {
>>> +                               onNewWindow.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AbstractAjaxTimerBehavior onSelfUpdate(Duration
>>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>>> +       {
>>> +               Args.notNull(onTimer, "onTimer");
>>> +
>>> +               return new AjaxSelfUpdatingTimerBehavior(interval)
>>> +               {
>>> +                       @Override
>>> +                       protected void
>>> onPostProcessTarget(AjaxRequestTarget target)
>>> +                       {
>>> +                               onTimer.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +
>>> +       public static AjaxFormChoiceComponentUpdatingBehavior
>>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice) {
>>> +               Args.notNull(onUpdateChoice, "onUpdateChoice");
>>> +               return new AjaxFormChoiceComponentUpdatingBehavior()
>>> +               {
>>> +                       @Override
>>> +                       protected void onUpdate(AjaxRequestTarget target)
>>> +                       {
>>> +                               onUpdateChoice.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxFormChoiceComponentUpdatingBehavior
>>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice,
>>> +
>>>      WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError) {
>>> +               Args.notNull(onUpdateChoice, "onUpdateChoice");
>>> +               Args.notNull(onError, "onError");
>>> +               return new AjaxFormChoiceComponentUpdatingBehavior()
>>> +               {
>>> +                       @Override
>>> +                       protected void onUpdate(AjaxRequestTarget target)
>>> +                       {
>>> +                               onUpdateChoice.accept(target);
>>> +                       }
>>> +
>>> +                       @Override
>>> +                       protected void onError(AjaxRequestTarget target,
>>> RuntimeException e)
>>> +                       {
>>> +                               onError.accept(target, e);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +
>>> +       public static AjaxFormComponentUpdatingBehavior onUpdate(String
>>> eventName, WicketConsumer<AjaxRequestTarget> onUpdate)
>>> +       {
>>> +               Args.notNull(onUpdate, "onUpdate");
>>> +
>>> +               return new AjaxFormComponentUpdatingBehavior(eventName)
>>> +               {
>>> +                       @Override
>>> +                       protected void onUpdate(AjaxRequestTarget target)
>>> +                       {
>>> +                               onUpdate.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxFormComponentUpdatingBehavior onUpdate(String
>>> eventName,
>>> +
>>> WicketConsumer<AjaxRequestTarget> onUpdate,
>>> +
>>> WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>>> +       {
>>> +               Args.notNull(onUpdate, "onUpdate");
>>> +               Args.notNull(onError, "onError");
>>> +
>>> +               return new AjaxFormComponentUpdatingBehavior(eventName)
>>> +               {
>>> +                       @Override
>>> +                       protected void onUpdate(AjaxRequestTarget target)
>>> +                       {
>>> +                               onUpdate.accept(target);
>>> +                       }
>>> +
>>> +                       @Override
>>> +                       protected void onError(AjaxRequestTarget target,
>>> RuntimeException e)
>>> +                       {
>>> +                               onError.accept(target, e);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxFormSubmitBehavior onSubmit(String eventName,
>>> WicketConsumer<AjaxRequestTarget> onSubmit)
>>> +       {
>>> +               Args.notNull(onSubmit, "onSubmit");
>>> +
>>> +               return new AjaxFormSubmitBehavior(eventName)
>>> +               {
>>> +                       @Override
>>> +                       protected void onSubmit(AjaxRequestTarget target)
>>> +                       {
>>> +                               onSubmit.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxFormSubmitBehavior onSubmit(String eventName,
>>> +
>>>   WicketConsumer<AjaxRequestTarget> onSubmit,
>>> +
>>>   WicketConsumer<AjaxRequestTarget> onError) {
>>> +               Args.notNull(onSubmit, "onSubmit");
>>> +               Args.notNull(onError, "onError");
>>> +
>>> +               return new AjaxFormSubmitBehavior(eventName)
>>> +               {
>>> +                       @Override
>>> +                       protected void onSubmit(AjaxRequestTarget target)
>>> +                       {
>>> +                               onSubmit.accept(target);
>>> +                       }
>>> +
>>> +                       @Override
>>> +                       protected void onError(AjaxRequestTarget target)
>>> +                       {
>>> +                               onError.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +
>>> +       public static OnChangeAjaxBehavior
>>> onChange(WicketConsumer<AjaxRequestTarget> onChange)
>>> +       {
>>> +               Args.notNull(onChange, "onChange");
>>> +
>>> +               return new OnChangeAjaxBehavior()
>>> +               {
>>> +                       @Override
>>> +                       protected void onUpdate(AjaxRequestTarget target)
>>> +                       {
>>> +                               onChange.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static OnChangeAjaxBehavior
>>> onChange(WicketConsumer<AjaxRequestTarget> onChange,
>>> +
>>>   WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>>> +       {
>>> +               Args.notNull(onChange, "onChange");
>>> +               Args.notNull(onError, "onError");
>>> +
>>> +               return new OnChangeAjaxBehavior()
>>> +               {
>>> +                       @Override
>>> +                       protected void onUpdate(AjaxRequestTarget target)
>>> +                       {
>>> +                               onChange.accept(target);
>>> +                       }
>>> +
>>> +                       @Override
>>> +                       protected void onError(AjaxRequestTarget target,
>>> RuntimeException e)
>>> +                       {
>>> +                               onError.accept(target, e);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static <T> AjaxLink<T> ajaxLink(String id,
>>> WicketConsumer<AjaxRequestTarget> onClick)
>>> +       {
>>> +               Args.notNull(onClick, "onClick");
>>> +
>>> +               return new AjaxLink<T>(id)
>>> +               {
>>> +                       @Override
>>> +                       public void onClick(AjaxRequestTarget target)
>>> +                       {
>>> +                               onClick.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +
>>> +       public static AjaxButton ajaxButton(String id,
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>>> +       {
>>> +               Args.notNull(onSubmit, "onSubmit");
>>> +
>>> +               return new AjaxButton(id)
>>> +               {
>>> +                       @Override
>>> +                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> +                       {
>>> +                               onSubmit.accept(target, form);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxButton ajaxButton(String id,
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>>> +
>>>   WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>>> +       {
>>> +               Args.notNull(onSubmit, "onSubmit");
>>> +               Args.notNull(onError, "onError");
>>> +
>>> +               return new AjaxButton(id)
>>> +               {
>>> +                       @Override
>>> +                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> +                       {
>>> +                               onSubmit.accept(target, form);
>>> +                       }
>>> +
>>> +                       @Override
>>> +                       protected void onError(AjaxRequestTarget target,
>>> Form<?> form)
>>> +                       {
>>> +                               onError.accept(target, form);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxCheckBox ajaxCheckBox(String id,
>>> WicketConsumer<AjaxRequestTarget> onUpdate)
>>> +       {
>>> +               Args.notNull(onUpdate, "onUpdate");
>>> +
>>> +               return new AjaxCheckBox(id)
>>> +               {
>>> +                       @Override
>>> +                       public void onUpdate(AjaxRequestTarget target)
>>> +                       {
>>> +                               onUpdate.accept(target);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +
>>> +       public static AjaxSubmitLink ajaxSubmitLink(String id,
>>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>>> +       {
>>> +               Args.notNull(onSubmit, "onSubmit");
>>> +
>>> +               return new AjaxSubmitLink(id)
>>> +               {
>>> +                       @Override
>>> +                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> +                       {
>>> +                               onSubmit.accept(target, form);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static AjaxSubmitLink ajaxSubmitLink(String id,
>>> +
>>>   WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>>> +
>>>   WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>>> +       {
>>> +               Args.notNull(onSubmit, "onSubmit");
>>> +               Args.notNull(onError, "onError");
>>> +
>>> +               return new AjaxSubmitLink(id)
>>> +               {
>>> +                       @Override
>>> +                       public void onSubmit(AjaxRequestTarget target,
>>> Form<?> form)
>>> +                       {
>>> +                               onSubmit.accept(target, form);
>>> +                       }
>>> +
>>> +                       @Override
>>> +                       protected void onError(AjaxRequestTarget target,
>>> Form<?> form)
>>> +                       {
>>> +                               onError.accept(target, form);
>>> +                       }
>>> +               };
>>> +       }
>>> +
>>> +       public static <T> Link<T> link(String id, WicketConsumer<Void>
>>> onClick)
>>> +       {
>>> +               Args.notNull(onClick, "onClick");
>>> +
>>> +               return new Link<T>(id)
>>> +               {
>>> +                       @Override
>>> +                       public void onClick()
>>> +                       {
>>> +                               onClick.accept((Void)null);
>>> +                       }
>>> +               };
>>> +       }
>>> +}
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>>> new file mode 100644
>>> index 0000000..509a6c5
>>> --- /dev/null
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>>> @@ -0,0 +1,32 @@
>>> +/*
>>> + * 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.lambdas;
>>> +
>>> +import java.io.Serializable;
>>> +import java.util.function.BiConsumer;
>>> +
>>> +/**
>>> + * A {@link Serializable} {@link BiConsumer}.
>>> + *
>>> + * @param <T>
>>> + *            - the type of the first input to consume
>>> + * @param <T>
>>> + *            - the type of the second input to consume
>>> + */
>>> +public interface WicketBiConsumer<T, U> extends BiConsumer<T, U>,
>>> Serializable
>>> +{
>>> +}
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>>> new file mode 100644
>>> index 0000000..36404f2
>>> --- /dev/null
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>>> @@ -0,0 +1,30 @@
>>> +/*
>>> + * 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.lambdas;
>>> +
>>> +import java.io.Serializable;
>>> +import java.util.function.Consumer;
>>> +
>>> +/**
>>> + * A {@link Serializable} {@link Consumer}.
>>> + *
>>> + * @param <T>
>>> + *            - the type of the input to consume
>>> + */
>>> +public interface WicketConsumer<T> extends Consumer<T>, Serializable
>>> +{
>>> +}
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>>> new file mode 100644
>>> index 0000000..7c6b9ae
>>> --- /dev/null
>>> +++
>>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>>> @@ -0,0 +1,32 @@
>>> +/*
>>> + * 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,
>>


Re: wicket git commit: Introduce Lambdas class - a class with factory methods for creating components and behaviors by using lambdas for their callback methods

Posted by Martin Grigorov <mg...@apache.org>.
On Sat, Mar 12, 2016 at 10:46 PM, Sven Meier <sv...@meiers.net> wrote:

> Hi,
>
> > org.apache.wicket.lambdas
>
> IMHO org.apache.wicket.lambda (not the singular) would be better: it
> aligns with org.apache.wicket.model.lambda and follows other package
> namings.
>

Done!


>
> > Lambdas
>
> What's the purpose of this class - is it supposed to ease static imports
> in an IDE?
>

Yes, static imports.
One can statically import Lambdas.ajaxLink or Lambdas.* and then use it
like:

add(ajaxLink("someId", this::onSomething));

The static method in AjaxLink is named "onClick" though.
The idea here is:
add(AjaxLink.onEvent("someId", this::onSomething))


> I'd rather keep all those implementations in the relevant classes, instead
> of this single location. If you see the need for such a 'collector', we
> could reverse the delegation:
>

I've moved them in one place because all those methods share the same
purpose.
I don't mind to move them back though.


> public class Lambdas {
>
>     public static AjaxSelfUpdatingTimerBehavior onSelfUpdate(Duration
> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>     {
>         return AjaxSelfUpdatingTimerBehavior.onSelfUpdate(interval,
> onTimer);
>     }
>
> }
>
> In this case I think a plural makes sense though.
>
> Regards
> Sven
>

I also want to check out Martijn's Lambdas class that he proposed a while
back but didn't commit it due to some problems in javac vs. Eclipse
compiler.

Thanks!


>
>
> On 12.03.2016 21:51, mgrigorov@apache.org wrote:
>
>> Repository: wicket
>> Updated Branches:
>>    refs/heads/static-factories-for-lambdas 229fee822 -> d3bee7507
>>
>>
>> Introduce Lambdas class - a class with factory methods for creating
>> components and behaviors by using lambdas for their callback methods
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d3bee750
>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d3bee750
>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d3bee750
>>
>> Branch: refs/heads/static-factories-for-lambdas
>> Commit: d3bee7507e14e7a1dc8ba9e9a0c77e02bffacda6
>> Parents: 229fee8
>> Author: Martin Tzvetanov Grigorov <mg...@apache.org>
>> Authored: Sat Mar 12 21:50:13 2016 +0100
>> Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
>> Committed: Sat Mar 12 21:50:13 2016 +0100
>>
>> ----------------------------------------------------------------------
>>   .../wicket/ajax/AbstractAjaxTimerBehavior.java  |  15 +-
>>   .../wicket/ajax/AjaxClientInfoBehavior.java     |  15 +-
>>   .../apache/wicket/ajax/AjaxEventBehavior.java   |  14 +-
>>   .../ajax/AjaxNewWindowNotifyingBehavior.java    |  24 +-
>>   .../ajax/AjaxSelfUpdatingTimerBehavior.java     |  15 +-
>>   ...AjaxFormChoiceComponentUpdatingBehavior.java |  34 +-
>>   .../form/AjaxFormComponentUpdatingBehavior.java |  35 +-
>>   .../ajax/form/AjaxFormSubmitBehavior.java       |  33 +-
>>   .../wicket/ajax/form/OnChangeAjaxBehavior.java  |  35 +-
>>   .../ajax/markup/html/AjaxFallbackLink.java      |   2 -
>>   .../wicket/ajax/markup/html/AjaxLink.java       |  17 +-
>>   .../ajax/markup/html/form/AjaxButton.java       |  40 +-
>>   .../ajax/markup/html/form/AjaxCheckBox.java     |  17 +-
>>   .../ajax/markup/html/form/AjaxSubmitLink.java   |  33 +-
>>   .../java/org/apache/wicket/lambdas/Lambdas.java | 366
>> +++++++++++++++++++
>>   .../apache/wicket/lambdas/WicketBiConsumer.java |  32 ++
>>   .../apache/wicket/lambdas/WicketConsumer.java   |  30 ++
>>   .../apache/wicket/lambdas/WicketFunction.java   |  32 ++
>>   .../apache/wicket/lambdas/WicketSupplier.java   |  30 ++
>>   .../apache/wicket/markup/html/link/Link.java    |  17 +-
>>   .../java/org/apache/wicket/model/Model.java     |  41 +++
>>   .../apache/wicket/model/lambda/LambdaModel.java |   7 +-
>>   .../model/lambda/SupplierCachingModel.java      |   1 +
>>   .../wicket/model/lambda/SupplierModel.java      |   1 +
>>   .../wicket/model/lambda/WicketBiConsumer.java   |  32 --
>>   .../wicket/model/lambda/WicketConsumer.java     |  30 --
>>   .../wicket/model/lambda/WicketFunction.java     |  32 --
>>   .../wicket/model/lambda/WicketSupplier.java     |  30 --
>>   .../wicket/model/lambda/LambdaModelTest.java    |   2 +
>>   .../model/lambda/SupplierCachingModelTest.java  |   1 +
>>   .../wicket/model/lambda/SupplierModelTest.java  |   1 +
>>   .../ajax/markup/html/IndicatingAjaxButton.java  |   9 +-
>>   .../ajax/markup/html/IndicatingAjaxLink.java    |   2 +-
>>   33 files changed, 603 insertions(+), 422 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>> index aef5591..4a3609c 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
>> @@ -19,10 +19,10 @@ package org.apache.wicket.ajax;
>>   import org.apache.wicket.Component;
>>   import org.apache.wicket.Page;
>>   import
>> org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.head.IHeaderResponse;
>>   import org.apache.wicket.markup.head.OnLoadHeaderItem;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>   import org.apache.wicket.util.time.Duration;
>>     /**
>> @@ -165,16 +165,7 @@ public abstract class AbstractAjaxTimerBehavior
>> extends AbstractDefaultAjaxBehav
>>         public static AbstractAjaxTimerBehavior onTimer(Duration
>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>>         {
>> -               Args.notNull(onTimer, "onTimer");
>> -
>> -               return new AbstractAjaxTimerBehavior(interval)
>> -               {
>> -                       @Override
>> -                       protected void onTimer(AjaxRequestTarget target)
>> -                       {
>> -                               onTimer.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onTimer(interval, onTimer);
>>         }
>>         /**
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>> index 22c9316..bd7c954 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxClientInfoBehavior.java
>> @@ -19,15 +19,15 @@ package org.apache.wicket.ajax;
>>   import org.apache.wicket.Component;
>>   import org.apache.wicket.Session;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>   import org.apache.wicket.markup.head.IHeaderResponse;
>>   import org.apache.wicket.markup.head.JavaScriptHeaderItem;
>>   import org.apache.wicket.markup.html.pages.BrowserInfoForm;
>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>>   import org.apache.wicket.protocol.http.ClientProperties;
>>   import org.apache.wicket.protocol.http.request.WebClientInfo;
>>   import org.apache.wicket.request.IRequestParameters;
>>   import org.apache.wicket.request.cycle.RequestCycle;
>> -import org.apache.wicket.util.lang.Args;
>>   import org.apache.wicket.util.time.Duration;
>>     /**
>> @@ -122,16 +122,7 @@ public class AjaxClientInfoBehavior extends
>> AbstractAjaxTimerBehavior
>>         public static AjaxClientInfoBehavior
>> onClientInfo(WicketBiConsumer<AjaxRequestTarget, WebClientInfo>
>> onClientInfo)
>>         {
>> -               Args.notNull(onClientInfo, "onClientInfo");
>> -
>> -               return new AjaxClientInfoBehavior()
>> -               {
>> -                       @Override
>> -                       protected void onClientInfo(AjaxRequestTarget
>> target, WebClientInfo clientInfo)
>> -                       {
>> -                               onClientInfo.accept(target, clientInfo);
>> -                       }
>> -               };
>> +               return Lambdas.onClientInfo(onClientInfo);
>>         }
>>         @Override
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java
>> ----------------------------------------------------------------------
>> 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 7a11b2d..fa49035 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
>> @@ -21,9 +21,10 @@ import java.util.List;
>>     import org.apache.wicket.Component;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.head.IHeaderResponse;
>>   import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>>   import org.apache.wicket.util.lang.Args;
>>   import org.apache.wicket.util.lang.Checks;
>>   import org.apache.wicket.util.string.Strings;
>> @@ -166,15 +167,6 @@ public abstract class AjaxEventBehavior extends
>> AbstractDefaultAjaxBehavior
>>         public static AjaxEventBehavior onEvent(String eventName,
>> WicketConsumer<AjaxRequestTarget> onEvent)
>>         {
>> -               Args.notNull(onEvent, "onEvent");
>> -
>> -               return new AjaxEventBehavior(eventName)
>> -               {
>> -                       @Override
>> -                       protected void onEvent(AjaxRequestTarget target)
>> -                       {
>> -                               onEvent.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onEvent(eventName, onEvent);
>>         }
>>   }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>> index 932d54e..130666b 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java
>> @@ -21,16 +21,13 @@ import java.util.UUID;
>>   import org.apache.wicket.Component;
>>   import org.apache.wicket.WicketRuntimeException;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   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.markup.html.WebPage;
>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.protocol.http.request.WebClientInfo;
>> -import org.apache.wicket.util.lang.Args;
>>   import org.apache.wicket.util.string.StringValue;
>> -import org.apache.wicket.util.string.Strings;
>>     /**
>>    * An Ajax behavior that notifies when a new browser window/tab is
>> opened with
>> @@ -133,21 +130,6 @@ public abstract class AjaxNewWindowNotifyingBehavior
>> extends AbstractDefaultAjax
>>         public static AjaxNewWindowNotifyingBehavior onNewWindow(String
>> windowName, WicketConsumer<AjaxRequestTarget> onNewWindow)
>>         {
>> -               Args.notNull(onNewWindow, "onNewWindow");
>> -
>> -               if (Strings.isEmpty(windowName))
>> -               {
>> -                       windowName = UUID.randomUUID().toString();
>> -               }
>> -
>> -               return new AjaxNewWindowNotifyingBehavior(windowName)
>> -               {
>> -                       @Override
>> -                       protected void onNewWindow(AjaxRequestTarget
>> target)
>> -                       {
>> -                               onNewWindow.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onNewWindow(windowName, onNewWindow);
>>         }
>> -
>>   }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>> index 479a6b9..d615ae5 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.java
>> @@ -16,8 +16,8 @@
>>    */
>>   package org.apache.wicket.ajax;
>>   -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.util.time.Duration;
>>     /**
>> @@ -67,15 +67,6 @@ public class AjaxSelfUpdatingTimerBehavior extends
>> AbstractAjaxTimerBehavior
>>         public static AbstractAjaxTimerBehavior onSelfUpdate(Duration
>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>>         {
>> -               Args.notNull(onTimer, "onTimer");
>> -
>> -               return new AjaxSelfUpdatingTimerBehavior(interval)
>> -               {
>> -                       @Override
>> -                       protected void
>> onPostProcessTarget(AjaxRequestTarget target)
>> -                       {
>> -                               onTimer.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onSelfUpdate(interval, onTimer);
>>         }
>>   }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>> index e5bc69a..19915d6 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java
>> @@ -21,14 +21,14 @@ import org.apache.wicket.WicketRuntimeException;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxCallListener;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice;
>>   import org.apache.wicket.markup.html.form.CheckGroup;
>>   import org.apache.wicket.markup.html.form.FormComponent;
>>   import org.apache.wicket.markup.html.form.RadioChoice;
>>   import org.apache.wicket.markup.html.form.RadioGroup;
>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>     /**
>>    * This is a Ajax Component Update Behavior that is meant for
>> choices/groups that are not one
>> @@ -114,36 +114,12 @@ public abstract class
>> AjaxFormChoiceComponentUpdatingBehavior extends
>>                         (component instanceof CheckGroup);
>>         }
>>   -
>>         public static AjaxFormChoiceComponentUpdatingBehavior
>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice) {
>> -               Args.notNull(onUpdateChoice, "onUpdateChoice");
>> -               return new AjaxFormChoiceComponentUpdatingBehavior()
>> -               {
>> -                       @Override
>> -                       protected void onUpdate(AjaxRequestTarget target)
>> -                       {
>> -                               onUpdateChoice.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onUpdateChoice(onUpdateChoice);
>>         }
>>         public static AjaxFormChoiceComponentUpdatingBehavior
>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice,
>>
>>  WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError) {
>> -               Args.notNull(onUpdateChoice, "onUpdateChoice");
>> -               Args.notNull(onError, "onError");
>> -               return new AjaxFormChoiceComponentUpdatingBehavior()
>> -               {
>> -                       @Override
>> -                       protected void onUpdate(AjaxRequestTarget target)
>> -                       {
>> -                               onUpdateChoice.accept(target);
>> -                       }
>> -
>> -                       @Override
>> -                       protected void onError(AjaxRequestTarget target,
>> RuntimeException e)
>> -                       {
>> -                               onError.accept(target, e);
>> -                       }
>> -               };
>> +               return Lambdas.onUpdateChoice(onUpdateChoice, onError);
>>         }
>>   }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/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 97b31a3..490afd6 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
>> @@ -23,11 +23,11 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.html.form.FormComponent;
>>   import org.apache.wicket.markup.html.form.validation.IFormValidator;
>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>   import org.slf4j.Logger;
>>   import org.slf4j.LoggerFactory;
>>   @@ -205,39 +205,14 @@ public abstract class
>> AjaxFormComponentUpdatingBehavior extends AjaxEventBehavio
>>         public static AjaxFormComponentUpdatingBehavior onUpdate(String
>> eventName, WicketConsumer<AjaxRequestTarget> onUpdate)
>>         {
>> -               Args.notNull(onUpdate, "onUpdate");
>> -
>> -               return new AjaxFormComponentUpdatingBehavior(eventName)
>> -               {
>> -                       @Override
>> -                       protected void onUpdate(AjaxRequestTarget target)
>> -                       {
>> -                               onUpdate.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onUpdate(eventName, onUpdate);
>>         }
>>         public static AjaxFormComponentUpdatingBehavior onUpdate(String
>> eventName,
>>
>>  WicketConsumer<AjaxRequestTarget> onUpdate,
>>
>>  WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>>         {
>> -               Args.notNull(onUpdate, "onUpdate");
>> -               Args.notNull(onError, "onError");
>> -
>> -               return new AjaxFormComponentUpdatingBehavior(eventName)
>> -               {
>> -                       @Override
>> -                       protected void onUpdate(AjaxRequestTarget target)
>> -                       {
>> -                               onUpdate.accept(target);
>> -                       }
>> -
>> -                       @Override
>> -                       protected void onError(AjaxRequestTarget target,
>> RuntimeException e)
>> -                       {
>> -                               onError.accept(target, e);
>> -                       }
>> -               };
>> +               return onUpdate(eventName, onUpdate, onError);
>>         }
>>         /**
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>> index 7b7c4a0..7011481 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java
>> @@ -21,12 +21,12 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.html.form.Button;
>>   import org.apache.wicket.markup.html.form.Form;
>>   import org.apache.wicket.markup.html.form.IFormSubmitter;
>>   import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>     /**
>>    * Ajax event behavior that submits a form via ajax when the event it
>> is attached to, is invoked.
>> @@ -272,37 +272,12 @@ public abstract class AjaxFormSubmitBehavior
>> extends AjaxEventBehavior
>>         public static AjaxFormSubmitBehavior onSubmit(String eventName,
>> WicketConsumer<AjaxRequestTarget> onSubmit)
>>         {
>> -               Args.notNull(onSubmit, "onSubmit");
>> -
>> -               return new AjaxFormSubmitBehavior(eventName)
>> -               {
>> -                       @Override
>> -                       protected void onSubmit(AjaxRequestTarget target)
>> -                       {
>> -                               onSubmit.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onSubmit(eventName, onSubmit);
>>         }
>>         public static AjaxFormSubmitBehavior onSubmit(String eventName,
>>
>> WicketConsumer<AjaxRequestTarget> onSubmit,
>>
>> WicketConsumer<AjaxRequestTarget> onError) {
>> -               Args.notNull(onSubmit, "onSubmit");
>> -               Args.notNull(onError, "onError");
>> -
>> -               return new AjaxFormSubmitBehavior(eventName)
>> -               {
>> -                       @Override
>> -                       protected void onSubmit(AjaxRequestTarget target)
>> -                       {
>> -                               onSubmit.accept(target);
>> -                       }
>> -
>> -                       @Override
>> -                       protected void onError(AjaxRequestTarget target)
>> -                       {
>> -                               onError.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onSubmit(eventName, onSubmit, onError);
>>         }
>>   }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>> index e1f2d9b..01c07a8 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.java
>> @@ -19,12 +19,12 @@ package org.apache.wicket.ajax.form;
>>   import org.apache.wicket.Component;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.html.form.FormComponent;
>>   import org.apache.wicket.markup.html.form.TextArea;
>>   import org.apache.wicket.markup.html.form.TextField;
>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>     /**
>>    * A behavior that updates the hosting {@link FormComponent} via Ajax
>> when value of the component is
>> @@ -80,38 +80,13 @@ public abstract class OnChangeAjaxBehavior extends
>> AjaxFormComponentUpdatingBeha
>>         public static OnChangeAjaxBehavior
>> onChange(WicketConsumer<AjaxRequestTarget> onChange)
>>         {
>> -               Args.notNull(onChange, "onChange");
>> -
>> -               return new OnChangeAjaxBehavior()
>> -               {
>> -                       @Override
>> -                       protected void onUpdate(AjaxRequestTarget target)
>> -                       {
>> -                               onChange.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.onChange(onChange);
>>         }
>>         public static OnChangeAjaxBehavior
>> onChange(WicketConsumer<AjaxRequestTarget> onChange,
>>
>> WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>>         {
>> -               Args.notNull(onChange, "onChange");
>> -               Args.notNull(onError, "onError");
>> -
>> -               return new OnChangeAjaxBehavior()
>> -               {
>> -                       @Override
>> -                       protected void onUpdate(AjaxRequestTarget target)
>> -                       {
>> -                               onChange.accept(target);
>> -                       }
>> -
>> -                       @Override
>> -                       protected void onError(AjaxRequestTarget target,
>> RuntimeException e)
>> -                       {
>> -                               onError.accept(target, e);
>> -                       }
>> -               };
>> +               return Lambdas.onChange(onChange, onError);
>>         }
>>     }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>> index 29ccb99..d4f95a3 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
>> @@ -24,8 +24,6 @@ import
>> org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>   import org.apache.wicket.markup.ComponentTag;
>>   import org.apache.wicket.markup.html.link.Link;
>>   import org.apache.wicket.model.IModel;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>     /**
>>    * An ajax link that will degrade to a normal request if ajax is not
>> available or javascript is
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>> index bf3d4d5..1907f58 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxLink.java
>> @@ -20,11 +20,11 @@ import org.apache.wicket.IGenericComponent;
>>   import org.apache.wicket.ajax.AjaxEventBehavior;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.ComponentTag;
>>   import org.apache.wicket.markup.html.link.AbstractLink;
>>   import org.apache.wicket.model.IModel;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>     /**
>>    * A component that allows a trigger request to be triggered via html
>> anchor tag
>> @@ -135,17 +135,8 @@ public abstract class AjaxLink<T> extends
>> AbstractLink implements IAjaxLink, IGe
>>         @Override
>>         public abstract void onClick(final AjaxRequestTarget target);
>>   -     public static <T> AjaxLink<T> ajaxLink(String id,
>> WicketConsumer<AjaxRequestTarget> onClick)
>> +       public static <T> AjaxLink<T> onClick(String id,
>> WicketConsumer<AjaxRequestTarget> onClick)
>>         {
>> -               Args.notNull(onClick, "onClick");
>> -
>> -               return new AjaxLink<T>(id)
>> -               {
>> -                       @Override
>> -                       public void onClick(AjaxRequestTarget target)
>> -                       {
>> -                               onClick.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.ajaxLink(id, onClick);
>>         }
>>   }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>> index ce2fcf7..9d3732f 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java
>> @@ -19,12 +19,12 @@ package org.apache.wicket.ajax.markup.html.form;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>   import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>   import org.apache.wicket.markup.ComponentTag;
>>   import org.apache.wicket.markup.html.form.Button;
>>   import org.apache.wicket.markup.html.form.Form;
>>   import org.apache.wicket.model.IModel;
>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>   import org.slf4j.Logger;
>>   import org.slf4j.LoggerFactory;
>>   @@ -219,40 +219,16 @@ public abstract class AjaxButton extends Button
>>         {
>>         }
>>   -     public static AjaxButton ajaxButton(String id,
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>> +       public static AjaxButton onSubmit(String id,
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>>         {
>> -               Args.notNull(onSubmit, "onSubmit");
>> -
>> -               return new AjaxButton(id)
>> -               {
>> -                       @Override
>> -                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> -                       {
>> -                               onSubmit.accept(target, form);
>> -                       }
>> -               };
>> +               return Lambdas.ajaxButton(id, onSubmit);
>>         }
>>   -     public static AjaxButton ajaxButton(String id,
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>> -
>>  WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>> +       public static AjaxButton onSubmit(String id,
>> +
>>  WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>> +
>>  WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>>         {
>> -               Args.notNull(onSubmit, "onSubmit");
>> -               Args.notNull(onError, "onError");
>> -
>> -               return new AjaxButton(id)
>> -               {
>> -                       @Override
>> -                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> -                       {
>> -                               onSubmit.accept(target, form);
>> -                       }
>> -
>> -                       @Override
>> -                       protected void onError(AjaxRequestTarget target,
>> Form<?> form)
>> -                       {
>> -                               onError.accept(target, form);
>> -                       }
>> -               };
>> +               return Lambdas.ajaxButton(id, onSubmit, onError);
>>         }
>>         /**
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>> index 54e8b3d..5dba68e 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxCheckBox.java
>> @@ -19,10 +19,10 @@ package org.apache.wicket.ajax.markup.html.form;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>   import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketConsumer;
>>   import org.apache.wicket.markup.html.form.CheckBox;
>>   import org.apache.wicket.model.IModel;
>> -import org.apache.wicket.model.lambda.WicketConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>     /**
>>    * A CheckBox which is updated via ajax when the user changes its value
>> @@ -92,17 +92,8 @@ public abstract class AjaxCheckBox extends CheckBox
>>          */
>>         protected abstract void onUpdate(AjaxRequestTarget target);
>>   -     public static AjaxCheckBox ajaxCheckBox(String id,
>> WicketConsumer<AjaxRequestTarget> onUpdate)
>> +       public static AjaxCheckBox onUpdate(String id,
>> WicketConsumer<AjaxRequestTarget> onUpdate)
>>         {
>> -               Args.notNull(onUpdate, "onUpdate");
>> -
>> -               return new AjaxCheckBox(id)
>> -               {
>> -                       @Override
>> -                       public void onUpdate(AjaxRequestTarget target)
>> -                       {
>> -                               onUpdate.accept(target);
>> -                       }
>> -               };
>> +               return Lambdas.ajaxCheckBox(id, onUpdate);
>>         }
>>   }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>> index f369bf6..552f64c 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java
>> @@ -19,11 +19,11 @@ package org.apache.wicket.ajax.markup.html.form;
>>   import org.apache.wicket.ajax.AjaxRequestTarget;
>>   import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
>>   import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
>> +import org.apache.wicket.lambdas.Lambdas;
>> +import org.apache.wicket.lambdas.WicketBiConsumer;
>>   import org.apache.wicket.markup.ComponentTag;
>>   import org.apache.wicket.markup.html.form.AbstractSubmitLink;
>>   import org.apache.wicket.markup.html.form.Form;
>> -import org.apache.wicket.model.lambda.WicketBiConsumer;
>> -import org.apache.wicket.util.lang.Args;
>>   import org.slf4j.Logger;
>>   import org.slf4j.LoggerFactory;
>>   @@ -138,39 +138,14 @@ public abstract class AjaxSubmitLink extends
>> AbstractSubmitLink
>>         public static AjaxSubmitLink ajaxSubmitLink(String id,
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>>         {
>> -               Args.notNull(onSubmit, "onSubmit");
>> -
>> -               return new AjaxSubmitLink(id)
>> -               {
>> -                       @Override
>> -                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> -                       {
>> -                               onSubmit.accept(target, form);
>> -                       }
>> -               };
>> +               return Lambdas.ajaxSubmitLink(id, onSubmit);
>>         }
>>         public static AjaxSubmitLink ajaxSubmitLink(String id,
>>
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>>
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>>         {
>> -               Args.notNull(onSubmit, "onSubmit");
>> -               Args.notNull(onError, "onError");
>> -
>> -               return new AjaxSubmitLink(id)
>> -               {
>> -                       @Override
>> -                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> -                       {
>> -                               onSubmit.accept(target, form);
>> -                       }
>> -
>> -                       @Override
>> -                       protected void onError(AjaxRequestTarget target,
>> Form<?> form)
>> -                       {
>> -                               onError.accept(target, form);
>> -                       }
>> -               };
>> +               return Lambdas.ajaxSubmitLink(id, onSubmit, onError);
>>         }
>>         protected void updateAjaxAttributes(AjaxRequestAttributes
>> attributes)
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>> new file mode 100644
>> index 0000000..0397706
>> --- /dev/null
>> +++ b/wicket-core/src/main/java/org/apache/wicket/lambdas/Lambdas.java
>> @@ -0,0 +1,366 @@
>> +package org.apache.wicket.lambdas;
>> +
>> +import java.util.UUID;
>> +
>> +import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
>> +import org.apache.wicket.ajax.AjaxClientInfoBehavior;
>> +import org.apache.wicket.ajax.AjaxEventBehavior;
>> +import org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior;
>> +import org.apache.wicket.ajax.AjaxRequestTarget;
>> +import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
>> +import
>> org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
>> +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
>> +import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
>> +import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
>> +import org.apache.wicket.ajax.markup.html.AjaxLink;
>> +import org.apache.wicket.ajax.markup.html.form.AjaxButton;
>> +import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
>> +import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
>> +import org.apache.wicket.markup.html.form.Form;
>> +import org.apache.wicket.markup.html.link.Link;
>> +import org.apache.wicket.protocol.http.request.WebClientInfo;
>> +import org.apache.wicket.util.lang.Args;
>> +import org.apache.wicket.util.string.Strings;
>> +import org.apache.wicket.util.time.Duration;
>> +
>> +/**
>> + *
>> + */
>> +public class Lambdas
>> +{
>> +       public static AbstractAjaxTimerBehavior onTimer(Duration
>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>> +       {
>> +               Args.notNull(onTimer, "onTimer");
>> +
>> +               return new AbstractAjaxTimerBehavior(interval)
>> +               {
>> +                       @Override
>> +                       protected void onTimer(AjaxRequestTarget target)
>> +                       {
>> +                               onTimer.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxClientInfoBehavior
>> onClientInfo(WicketBiConsumer<AjaxRequestTarget, WebClientInfo>
>> onClientInfo)
>> +       {
>> +               Args.notNull(onClientInfo, "onClientInfo");
>> +
>> +               return new AjaxClientInfoBehavior()
>> +               {
>> +                       @Override
>> +                       protected void onClientInfo(AjaxRequestTarget
>> target, WebClientInfo clientInfo)
>> +                       {
>> +                               onClientInfo.accept(target, clientInfo);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxEventBehavior onEvent(String eventName,
>> WicketConsumer<AjaxRequestTarget> onEvent)
>> +       {
>> +               Args.notNull(onEvent, "onEvent");
>> +
>> +               return new AjaxEventBehavior(eventName)
>> +               {
>> +                       @Override
>> +                       protected void onEvent(AjaxRequestTarget target)
>> +                       {
>> +                               onEvent.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxNewWindowNotifyingBehavior onNewWindow(String
>> windowName, WicketConsumer<AjaxRequestTarget> onNewWindow)
>> +       {
>> +               Args.notNull(onNewWindow, "onNewWindow");
>> +
>> +               if (Strings.isEmpty(windowName))
>> +               {
>> +                       windowName = UUID.randomUUID().toString();
>> +               }
>> +
>> +               return new AjaxNewWindowNotifyingBehavior(windowName)
>> +               {
>> +                       @Override
>> +                       protected void onNewWindow(AjaxRequestTarget
>> target)
>> +                       {
>> +                               onNewWindow.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AbstractAjaxTimerBehavior onSelfUpdate(Duration
>> interval, WicketConsumer<AjaxRequestTarget> onTimer)
>> +       {
>> +               Args.notNull(onTimer, "onTimer");
>> +
>> +               return new AjaxSelfUpdatingTimerBehavior(interval)
>> +               {
>> +                       @Override
>> +                       protected void
>> onPostProcessTarget(AjaxRequestTarget target)
>> +                       {
>> +                               onTimer.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +
>> +       public static AjaxFormChoiceComponentUpdatingBehavior
>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice) {
>> +               Args.notNull(onUpdateChoice, "onUpdateChoice");
>> +               return new AjaxFormChoiceComponentUpdatingBehavior()
>> +               {
>> +                       @Override
>> +                       protected void onUpdate(AjaxRequestTarget target)
>> +                       {
>> +                               onUpdateChoice.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxFormChoiceComponentUpdatingBehavior
>> onUpdateChoice(WicketConsumer<AjaxRequestTarget> onUpdateChoice,
>> +
>>     WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError) {
>> +               Args.notNull(onUpdateChoice, "onUpdateChoice");
>> +               Args.notNull(onError, "onError");
>> +               return new AjaxFormChoiceComponentUpdatingBehavior()
>> +               {
>> +                       @Override
>> +                       protected void onUpdate(AjaxRequestTarget target)
>> +                       {
>> +                               onUpdateChoice.accept(target);
>> +                       }
>> +
>> +                       @Override
>> +                       protected void onError(AjaxRequestTarget target,
>> RuntimeException e)
>> +                       {
>> +                               onError.accept(target, e);
>> +                       }
>> +               };
>> +       }
>> +
>> +
>> +       public static AjaxFormComponentUpdatingBehavior onUpdate(String
>> eventName, WicketConsumer<AjaxRequestTarget> onUpdate)
>> +       {
>> +               Args.notNull(onUpdate, "onUpdate");
>> +
>> +               return new AjaxFormComponentUpdatingBehavior(eventName)
>> +               {
>> +                       @Override
>> +                       protected void onUpdate(AjaxRequestTarget target)
>> +                       {
>> +                               onUpdate.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxFormComponentUpdatingBehavior onUpdate(String
>> eventName,
>> +
>> WicketConsumer<AjaxRequestTarget> onUpdate,
>> +
>> WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>> +       {
>> +               Args.notNull(onUpdate, "onUpdate");
>> +               Args.notNull(onError, "onError");
>> +
>> +               return new AjaxFormComponentUpdatingBehavior(eventName)
>> +               {
>> +                       @Override
>> +                       protected void onUpdate(AjaxRequestTarget target)
>> +                       {
>> +                               onUpdate.accept(target);
>> +                       }
>> +
>> +                       @Override
>> +                       protected void onError(AjaxRequestTarget target,
>> RuntimeException e)
>> +                       {
>> +                               onError.accept(target, e);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxFormSubmitBehavior onSubmit(String eventName,
>> WicketConsumer<AjaxRequestTarget> onSubmit)
>> +       {
>> +               Args.notNull(onSubmit, "onSubmit");
>> +
>> +               return new AjaxFormSubmitBehavior(eventName)
>> +               {
>> +                       @Override
>> +                       protected void onSubmit(AjaxRequestTarget target)
>> +                       {
>> +                               onSubmit.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxFormSubmitBehavior onSubmit(String eventName,
>> +
>>  WicketConsumer<AjaxRequestTarget> onSubmit,
>> +
>>  WicketConsumer<AjaxRequestTarget> onError) {
>> +               Args.notNull(onSubmit, "onSubmit");
>> +               Args.notNull(onError, "onError");
>> +
>> +               return new AjaxFormSubmitBehavior(eventName)
>> +               {
>> +                       @Override
>> +                       protected void onSubmit(AjaxRequestTarget target)
>> +                       {
>> +                               onSubmit.accept(target);
>> +                       }
>> +
>> +                       @Override
>> +                       protected void onError(AjaxRequestTarget target)
>> +                       {
>> +                               onError.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +
>> +       public static OnChangeAjaxBehavior
>> onChange(WicketConsumer<AjaxRequestTarget> onChange)
>> +       {
>> +               Args.notNull(onChange, "onChange");
>> +
>> +               return new OnChangeAjaxBehavior()
>> +               {
>> +                       @Override
>> +                       protected void onUpdate(AjaxRequestTarget target)
>> +                       {
>> +                               onChange.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static OnChangeAjaxBehavior
>> onChange(WicketConsumer<AjaxRequestTarget> onChange,
>> +
>>  WicketBiConsumer<AjaxRequestTarget, RuntimeException> onError)
>> +       {
>> +               Args.notNull(onChange, "onChange");
>> +               Args.notNull(onError, "onError");
>> +
>> +               return new OnChangeAjaxBehavior()
>> +               {
>> +                       @Override
>> +                       protected void onUpdate(AjaxRequestTarget target)
>> +                       {
>> +                               onChange.accept(target);
>> +                       }
>> +
>> +                       @Override
>> +                       protected void onError(AjaxRequestTarget target,
>> RuntimeException e)
>> +                       {
>> +                               onError.accept(target, e);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static <T> AjaxLink<T> ajaxLink(String id,
>> WicketConsumer<AjaxRequestTarget> onClick)
>> +       {
>> +               Args.notNull(onClick, "onClick");
>> +
>> +               return new AjaxLink<T>(id)
>> +               {
>> +                       @Override
>> +                       public void onClick(AjaxRequestTarget target)
>> +                       {
>> +                               onClick.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +
>> +       public static AjaxButton ajaxButton(String id,
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>> +       {
>> +               Args.notNull(onSubmit, "onSubmit");
>> +
>> +               return new AjaxButton(id)
>> +               {
>> +                       @Override
>> +                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> +                       {
>> +                               onSubmit.accept(target, form);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxButton ajaxButton(String id,
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>> +
>>  WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>> +       {
>> +               Args.notNull(onSubmit, "onSubmit");
>> +               Args.notNull(onError, "onError");
>> +
>> +               return new AjaxButton(id)
>> +               {
>> +                       @Override
>> +                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> +                       {
>> +                               onSubmit.accept(target, form);
>> +                       }
>> +
>> +                       @Override
>> +                       protected void onError(AjaxRequestTarget target,
>> Form<?> form)
>> +                       {
>> +                               onError.accept(target, form);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxCheckBox ajaxCheckBox(String id,
>> WicketConsumer<AjaxRequestTarget> onUpdate)
>> +       {
>> +               Args.notNull(onUpdate, "onUpdate");
>> +
>> +               return new AjaxCheckBox(id)
>> +               {
>> +                       @Override
>> +                       public void onUpdate(AjaxRequestTarget target)
>> +                       {
>> +                               onUpdate.accept(target);
>> +                       }
>> +               };
>> +       }
>> +
>> +
>> +       public static AjaxSubmitLink ajaxSubmitLink(String id,
>> WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit)
>> +       {
>> +               Args.notNull(onSubmit, "onSubmit");
>> +
>> +               return new AjaxSubmitLink(id)
>> +               {
>> +                       @Override
>> +                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> +                       {
>> +                               onSubmit.accept(target, form);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static AjaxSubmitLink ajaxSubmitLink(String id,
>> +
>>  WicketBiConsumer<AjaxRequestTarget, Form<?>> onSubmit,
>> +
>>  WicketBiConsumer<AjaxRequestTarget, Form<?>> onError)
>> +       {
>> +               Args.notNull(onSubmit, "onSubmit");
>> +               Args.notNull(onError, "onError");
>> +
>> +               return new AjaxSubmitLink(id)
>> +               {
>> +                       @Override
>> +                       public void onSubmit(AjaxRequestTarget target,
>> Form<?> form)
>> +                       {
>> +                               onSubmit.accept(target, form);
>> +                       }
>> +
>> +                       @Override
>> +                       protected void onError(AjaxRequestTarget target,
>> Form<?> form)
>> +                       {
>> +                               onError.accept(target, form);
>> +                       }
>> +               };
>> +       }
>> +
>> +       public static <T> Link<T> link(String id, WicketConsumer<Void>
>> onClick)
>> +       {
>> +               Args.notNull(onClick, "onClick");
>> +
>> +               return new Link<T>(id)
>> +               {
>> +                       @Override
>> +                       public void onClick()
>> +                       {
>> +                               onClick.accept((Void)null);
>> +                       }
>> +               };
>> +       }
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>> new file mode 100644
>> index 0000000..509a6c5
>> --- /dev/null
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketBiConsumer.java
>> @@ -0,0 +1,32 @@
>> +/*
>> + * 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.lambdas;
>> +
>> +import java.io.Serializable;
>> +import java.util.function.BiConsumer;
>> +
>> +/**
>> + * A {@link Serializable} {@link BiConsumer}.
>> + *
>> + * @param <T>
>> + *            - the type of the first input to consume
>> + * @param <T>
>> + *            - the type of the second input to consume
>> + */
>> +public interface WicketBiConsumer<T, U> extends BiConsumer<T, U>,
>> Serializable
>> +{
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>> new file mode 100644
>> index 0000000..36404f2
>> --- /dev/null
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketConsumer.java
>> @@ -0,0 +1,30 @@
>> +/*
>> + * 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.lambdas;
>> +
>> +import java.io.Serializable;
>> +import java.util.function.Consumer;
>> +
>> +/**
>> + * A {@link Serializable} {@link Consumer}.
>> + *
>> + * @param <T>
>> + *            - the type of the input to consume
>> + */
>> +public interface WicketConsumer<T> extends Consumer<T>, Serializable
>> +{
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/d3bee750/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>> new file mode 100644
>> index 0000000..7c6b9ae
>> --- /dev/null
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/lambdas/WicketFunction.java
>> @@ -0,0 +1,32 @@
>> +/*
>> + * 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,
>
>