Actually WorldClockPage shows a nice usage of lambdas where a single argument makes it easy to forward the click:

        add(AjaxLink.onClick("stop", timer::stop));

So I've added back a factory method for a (non-Bi)Consumer, so now we have two:

static <T> AjaxLink<T> onClick(String id, WicketConsumer<AjaxRequestTarget> onClick) static <T> AjaxLink<T> onClick(String id, WicketBiConsumer<AjaxLink<T>, AjaxRequestTarget> onClick)

Hopefully we don't have to add all sorts of argument combinations :/.

Sven


On 16.06.2016 08:06, Sven Meier wrote:
Hi all,

IMHO all lambdas used for component creation would benefit from getting a reference to the actual component, i.e.:

static <T> AjaxLink<T> ajaxLink(String id, WicketBiConsumer<AjaxLink<T>, AjaxRequestTarget> onClick) static AjaxButton ajaxButton(String id, WicketBiConsumer<AjaxButton, AjaxRequestTarget> onSubmit) static AjaxButton ajaxButton(String id, WicketBiConsumer<AjaxButton, AjaxRequestTarget> onSubmit, WicketBiConsumer<AjaxButton, AjaxRequestTarget> onError) static AjaxCheckBox ajaxCheckBox(String id, WicketBiConsumer<AjaxCheckBox, AjaxRequestTarget> onUpdate) static AjaxSubmitLink ajaxSubmitLink(String id, WicketBiConsumer<AjaxSubmitLink, AjaxRequestTarget> onSubmit) static AjaxSubmitLink ajaxSubmitLink(String id, WicketBiConsumer<AjaxSubmitLink, AjaxRequestTarget> onSubmit, WicketBiConsumer<AjaxSubmitLink, AjaxRequestTarget> onError)
static <T> Link<T> link(String id, WicketConsumer<Link<T>> onClick)

Their usage is still nice to read and (with the help of your IDE) manageable to write:

add(Link.onClick("adminAnnotInternalLink", link -> setResponsePage(new AdminAnnotationsInternalPage("bar"))));

I've changed the factory methods, let me know if you don't like it.

Sven



On 15.06.2016 19:06, Sven Meier wrote:
Hi,

for this 'corner case' we might just as well pass in the link as argument:

public static <T> Link<T> onClick(String id, WicketConsumer<Link<T>> onClick)

    add(Link.onClick("adminAnnotInternalLink", link -> ...));

This might be handy if you want to do something with the link (update, replace, etc.)

Have fun
Sven


On 15.06.2016 12:45, Martin Grigorov wrote:
Hi,

I've started refactoring wicket-examples to use more of the Java 8
functionalities in Wicket and
I've found a problem with Link#onClick(String, WicketConsumer<Void>) method.
See
https://github.com/apache/wicket/commit/5d87f50646d13d858eab69d7892075be8cdb1dbd#diff-0419829765d01bcc9911c318ea9bba4e
Here I needed to use "(ignoreme)" as an input for the lambda to make it
compileable.
The problem is that Java 8 doesn't provide Consumer without an input.
Here is a discussion about this:
http://programmers.stackexchange.com/questions/276859/what-is-the-name-of-a-function-that-takes-no-argument-and-returns-nothing

Shall we introduce our own Consumer0/Procedure/Command or use
java.lang.Runnable in the API ?


Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov




Reply via email to