Hi, Yesterday I've prepared branch 'special-functional-interfaces' with Martijn's suggestion. But my Internet connection in my hotel didn't allow to push it. Even my email is still in the outbox. I think the impl looks good!
I'll check Sven's work later and either propose to merge the ideas or I'll drop my branch. Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Thu, Jun 16, 2016 at 8:19 AM, Sven Meier <[email protected]> wrote: > 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 >>>> >>>> >>> >> >
