You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Martin Grigorov <mg...@apache.org> on 2016/11/25 19:51:28 UTC

Behavior#onTag() doesn't have the Component

Hi,

At Martijn's slides from ApacheCon [1] I've noticed that critiques he
mention is that org.apache.wicket.behavior.Behavior#onTag() uses
SerializableConsumer<ComponentTag> and ignores the Component parameter.
I agree that having the component would be handy!

Any good reasons why it should be like this ?

1.
http://events.linuxfoundation.org/sites/events/files/slides/Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf


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

Re: Behavior#onTag() doesn't have the Component

Posted by Martin Grigorov <mg...@apache.org>.
Agreed!
Thanks!

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

On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:

> Hi,
>
> the behavior is added to a single component only and readily available
> anyway in scope:
>
>     component.add(onTag(tag -> tag.put(key, component.getId()));
>
> What do we gain when the same component is  given as argument?
>
>     component.add(onTag(component, tag -> tag.put(key,
> component.getId())));
>
> Note that the first component has a better type, the argument would just
> be a Component:
>
>     foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>
> Regards
> Sven
>
>
>
> On 25.11.2016 20:51, Martin Grigorov wrote:
>
>> Hi,
>>
>> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>> SerializableConsumer<ComponentTag> and ignores the Component parameter.
>> I agree that having the component would be handy!
>>
>> Any good reasons why it should be like this ?
>>
>> 1.
>> http://events.linuxfoundation.org/sites/events/files/slides/
>> Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>
>>
>> Martin Grigorov
>> Wicket Training and Consulting
>> https://twitter.com/mtgrigorov
>>
>>
>

Re: Behavior#onTag() doesn't have the Component

Posted by Martin Grigorov <mg...@apache.org>.
Changed with https://issues.apache.org/jira/browse/WICKET-6293

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

On Sun, Dec 4, 2016 at 10:17 PM, Sven Meier <sv...@meiers.net> wrote:

> Hi Martin,
>
> > It is shorter with three chars "c, ".
>
> .. and two /parentheses. /I though you knew of a shorter lambda syntax I
> wasn't aware of.
>
> I'm fine with a single method, at least it's consistent with
> #onComponentTag() this way.
>
> Have fun
> Sven
>
>
>
> On 04.12.2016 14:26, Martin Grigorov wrote:
>
>> Hi Sven
>>
>> label1.add(Behavior.onTag(t->t.put(key, label1.getId()));         // 58
>> characters
>> label1.add(Behavior.onTag((c, t)->t.put(key, label1.getId()));   // 63
>> charactes
>>
>> "I'd like to preserve the first one because it's syntactically shorter."
>>
>> I thought that you say that the first example is much shorter than the
>> second and that's why you prefer to keep it.
>> It is just five 5 characters shorter. And all of them are auto-suggested
>> by
>> my IDE.
>> My IDE actually auggests
>> label1.add(Behavior.onTag((component, tag)-> {_}));   // _ is the cursor
>> position
>>
>> Or you meant something else ?
>>
>>
>> Martin Grigorov
>> Wicket Training and Consulting
>> https://twitter.com/mtgrigorov
>>
>> On Sat, Dec 3, 2016 at 3:46 PM, Sven Meier <sv...@meiers.net> wrote:
>>
>> It is shorter with three chars "c, "
>>>>
>>> Can you explain how that works?
>>>
>>> Thanks
>>> Sven
>>>
>>>
>>>
>>> On 03.12.2016 12:36, Martin Grigorov wrote:
>>>
>>> On Sat, Dec 3, 2016 at 12:20 PM, Sven Meier <sv...@meiers.net> wrote:
>>>>
>>>> Hi,
>>>>
>>>>> I see your point.
>>>>>
>>>>> We could have both:
>>>>>
>>>>>     label1.add(Behavior.onTag(t->t.put(key, label1.getId()));
>>>>>     label1.add(Behavior.onTag((c, t)->t.put(key, c.getId()));
>>>>>
>>>>> Both the Eclipse and JDK compiler accept these.
>>>>> The component should come as first argument as in
>>>>> Behavior#onComponentTag(Component, ComponentTag) though.
>>>>>
>>>>> I'd like to preserve the first one because it's syntactically shorter.
>>>>>
>>>>> It is shorter with three chars  "c, ". IMO one method is enough. The
>>>>> IDE
>>>>>
>>>> helps anyway.
>>>>
>>>>
>>>> Have fun
>>>>
>>>>> Sven
>>>>>
>>>>>
>>>>>
>>>>> On 02.12.2016 17:58, Martijn Dashorst wrote:
>>>>>
>>>>> But it would add another reference to the component, increasing the
>>>>>
>>>>>> footprint. It also enables you to 'bind' to another (unintended)
>>>>>> component that's available in the scope.
>>>>>>
>>>>>> Label label1 = new Label(...);
>>>>>> ...
>>>>>> Label label4 = new Label(...);
>>>>>>
>>>>>> label1.add(Behavior.onTag(t->t.put(key, label4.getId()));
>>>>>>
>>>>>>
>>>>>> When supplying the component as a second parameter in the onTag, you
>>>>>> direct the developer to know what the intention is:
>>>>>>
>>>>>> label1.add(Behavior.onTag(t,c -> t.put(key, c.getId()));
>>>>>>
>>>>>> Martijn
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>>> the behavior is added to a single component only and readily
>>>>>>> available
>>>>>>> anyway in scope:
>>>>>>>
>>>>>>>        component.add(onTag(tag -> tag.put(key, component.getId()));
>>>>>>>
>>>>>>> What do we gain when the same component is  given as argument?
>>>>>>>
>>>>>>>        component.add(onTag(component, tag -> tag.put(key,
>>>>>>> component.getId())));
>>>>>>>
>>>>>>> Note that the first component has a better type, the argument would
>>>>>>> just
>>>>>>> be
>>>>>>> a Component:
>>>>>>>
>>>>>>>        foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>>>>>>>
>>>>>>> Regards
>>>>>>> Sven
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 25.11.2016 20:51, Martin Grigorov wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>>> At Martijn's slides from ApacheCon [1] I've noticed that critiques
>>>>>>>> he
>>>>>>>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>>>>>>>> SerializableConsumer<ComponentTag> and ignores the Component
>>>>>>>> parameter.
>>>>>>>> I agree that having the component would be handy!
>>>>>>>>
>>>>>>>> Any good reasons why it should be like this ?
>>>>>>>>
>>>>>>>> 1.
>>>>>>>>
>>>>>>>> http://events.linuxfoundation.org/sites/events/files/slides/
>>>>>>>> Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>>>>>>>
>>>>>>>>
>>>>>>>> Martin Grigorov
>>>>>>>> Wicket Training and Consulting
>>>>>>>> https://twitter.com/mtgrigorov
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>

Re: Behavior#onTag() doesn't have the Component

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

 > It is shorter with three chars "c, ".

.. and two /parentheses. /I though you knew of a shorter lambda syntax I 
wasn't aware of.

I'm fine with a single method, at least it's consistent with 
#onComponentTag() this way.

Have fun
Sven


On 04.12.2016 14:26, Martin Grigorov wrote:
> Hi Sven
>
> label1.add(Behavior.onTag(t->t.put(key, label1.getId()));         // 58
> characters
> label1.add(Behavior.onTag((c, t)->t.put(key, label1.getId()));   // 63
> charactes
>
> "I'd like to preserve the first one because it's syntactically shorter."
>
> I thought that you say that the first example is much shorter than the
> second and that's why you prefer to keep it.
> It is just five 5 characters shorter. And all of them are auto-suggested by
> my IDE.
> My IDE actually auggests
> label1.add(Behavior.onTag((component, tag)-> {_}));   // _ is the cursor
> position
>
> Or you meant something else ?
>
>
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>
> On Sat, Dec 3, 2016 at 3:46 PM, Sven Meier <sv...@meiers.net> wrote:
>
>>> It is shorter with three chars "c, "
>> Can you explain how that works?
>>
>> Thanks
>> Sven
>>
>>
>>
>> On 03.12.2016 12:36, Martin Grigorov wrote:
>>
>>> On Sat, Dec 3, 2016 at 12:20 PM, Sven Meier <sv...@meiers.net> wrote:
>>>
>>> Hi,
>>>> I see your point.
>>>>
>>>> We could have both:
>>>>
>>>>     label1.add(Behavior.onTag(t->t.put(key, label1.getId()));
>>>>     label1.add(Behavior.onTag((c, t)->t.put(key, c.getId()));
>>>>
>>>> Both the Eclipse and JDK compiler accept these.
>>>> The component should come as first argument as in
>>>> Behavior#onComponentTag(Component, ComponentTag) though.
>>>>
>>>> I'd like to preserve the first one because it's syntactically shorter.
>>>>
>>>> It is shorter with three chars  "c, ". IMO one method is enough. The IDE
>>> helps anyway.
>>>
>>>
>>> Have fun
>>>> Sven
>>>>
>>>>
>>>>
>>>> On 02.12.2016 17:58, Martijn Dashorst wrote:
>>>>
>>>> But it would add another reference to the component, increasing the
>>>>> footprint. It also enables you to 'bind' to another (unintended)
>>>>> component that's available in the scope.
>>>>>
>>>>> Label label1 = new Label(...);
>>>>> ...
>>>>> Label label4 = new Label(...);
>>>>>
>>>>> label1.add(Behavior.onTag(t->t.put(key, label4.getId()));
>>>>>
>>>>>
>>>>> When supplying the component as a second parameter in the onTag, you
>>>>> direct the developer to know what the intention is:
>>>>>
>>>>> label1.add(Behavior.onTag(t,c -> t.put(key, c.getId()));
>>>>>
>>>>> Martijn
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:
>>>>>
>>>>> Hi,
>>>>>> the behavior is added to a single component only and readily available
>>>>>> anyway in scope:
>>>>>>
>>>>>>        component.add(onTag(tag -> tag.put(key, component.getId()));
>>>>>>
>>>>>> What do we gain when the same component is  given as argument?
>>>>>>
>>>>>>        component.add(onTag(component, tag -> tag.put(key,
>>>>>> component.getId())));
>>>>>>
>>>>>> Note that the first component has a better type, the argument would
>>>>>> just
>>>>>> be
>>>>>> a Component:
>>>>>>
>>>>>>        foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>>>>>>
>>>>>> Regards
>>>>>> Sven
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 25.11.2016 20:51, Martin Grigorov wrote:
>>>>>>
>>>>>> Hi,
>>>>>>> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
>>>>>>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>>>>>>> SerializableConsumer<ComponentTag> and ignores the Component
>>>>>>> parameter.
>>>>>>> I agree that having the component would be handy!
>>>>>>>
>>>>>>> Any good reasons why it should be like this ?
>>>>>>>
>>>>>>> 1.
>>>>>>>
>>>>>>> http://events.linuxfoundation.org/sites/events/files/slides/
>>>>>>> Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>>>>>>
>>>>>>>
>>>>>>> Martin Grigorov
>>>>>>> Wicket Training and Consulting
>>>>>>> https://twitter.com/mtgrigorov
>>>>>>>
>>>>>>>
>>>>>>>


Re: Behavior#onTag() doesn't have the Component

Posted by Martin Grigorov <mg...@apache.org>.
Hi Sven

label1.add(Behavior.onTag(t->t.put(key, label1.getId()));         // 58
characters
label1.add(Behavior.onTag((c, t)->t.put(key, label1.getId()));   // 63
charactes

"I'd like to preserve the first one because it's syntactically shorter."

I thought that you say that the first example is much shorter than the
second and that's why you prefer to keep it.
It is just five 5 characters shorter. And all of them are auto-suggested by
my IDE.
My IDE actually auggests
label1.add(Behavior.onTag((component, tag)-> {_}));   // _ is the cursor
position

Or you meant something else ?


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

On Sat, Dec 3, 2016 at 3:46 PM, Sven Meier <sv...@meiers.net> wrote:

> >It is shorter with three chars "c, "
>
> Can you explain how that works?
>
> Thanks
> Sven
>
>
>
> On 03.12.2016 12:36, Martin Grigorov wrote:
>
>> On Sat, Dec 3, 2016 at 12:20 PM, Sven Meier <sv...@meiers.net> wrote:
>>
>> Hi,
>>>
>>> I see your point.
>>>
>>> We could have both:
>>>
>>>    label1.add(Behavior.onTag(t->t.put(key, label1.getId()));
>>>    label1.add(Behavior.onTag((c, t)->t.put(key, c.getId()));
>>>
>>> Both the Eclipse and JDK compiler accept these.
>>> The component should come as first argument as in
>>> Behavior#onComponentTag(Component, ComponentTag) though.
>>>
>>> I'd like to preserve the first one because it's syntactically shorter.
>>>
>>> It is shorter with three chars  "c, ". IMO one method is enough. The IDE
>> helps anyway.
>>
>>
>> Have fun
>>> Sven
>>>
>>>
>>>
>>> On 02.12.2016 17:58, Martijn Dashorst wrote:
>>>
>>> But it would add another reference to the component, increasing the
>>>> footprint. It also enables you to 'bind' to another (unintended)
>>>> component that's available in the scope.
>>>>
>>>> Label label1 = new Label(...);
>>>> ...
>>>> Label label4 = new Label(...);
>>>>
>>>> label1.add(Behavior.onTag(t->t.put(key, label4.getId()));
>>>>
>>>>
>>>> When supplying the component as a second parameter in the onTag, you
>>>> direct the developer to know what the intention is:
>>>>
>>>> label1.add(Behavior.onTag(t,c -> t.put(key, c.getId()));
>>>>
>>>> Martijn
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:
>>>>
>>>> Hi,
>>>>>
>>>>> the behavior is added to a single component only and readily available
>>>>> anyway in scope:
>>>>>
>>>>>       component.add(onTag(tag -> tag.put(key, component.getId()));
>>>>>
>>>>> What do we gain when the same component is  given as argument?
>>>>>
>>>>>       component.add(onTag(component, tag -> tag.put(key,
>>>>> component.getId())));
>>>>>
>>>>> Note that the first component has a better type, the argument would
>>>>> just
>>>>> be
>>>>> a Component:
>>>>>
>>>>>       foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>>>>>
>>>>> Regards
>>>>> Sven
>>>>>
>>>>>
>>>>>
>>>>> On 25.11.2016 20:51, Martin Grigorov wrote:
>>>>>
>>>>> Hi,
>>>>>>
>>>>>> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
>>>>>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>>>>>> SerializableConsumer<ComponentTag> and ignores the Component
>>>>>> parameter.
>>>>>> I agree that having the component would be handy!
>>>>>>
>>>>>> Any good reasons why it should be like this ?
>>>>>>
>>>>>> 1.
>>>>>>
>>>>>> http://events.linuxfoundation.org/sites/events/files/slides/
>>>>>> Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>>>>>
>>>>>>
>>>>>> Martin Grigorov
>>>>>> Wicket Training and Consulting
>>>>>> https://twitter.com/mtgrigorov
>>>>>>
>>>>>>
>>>>>>
>>>>
>

Re: Behavior#onTag() doesn't have the Component

Posted by Sven Meier <sv...@meiers.net>.
 >It is shorter with three chars "c, "

Can you explain how that works?

Thanks
Sven


On 03.12.2016 12:36, Martin Grigorov wrote:
> On Sat, Dec 3, 2016 at 12:20 PM, Sven Meier <sv...@meiers.net> wrote:
>
>> Hi,
>>
>> I see your point.
>>
>> We could have both:
>>
>>    label1.add(Behavior.onTag(t->t.put(key, label1.getId()));
>>    label1.add(Behavior.onTag((c, t)->t.put(key, c.getId()));
>>
>> Both the Eclipse and JDK compiler accept these.
>> The component should come as first argument as in
>> Behavior#onComponentTag(Component, ComponentTag) though.
>>
>> I'd like to preserve the first one because it's syntactically shorter.
>>
> It is shorter with three chars  "c, ". IMO one method is enough. The IDE
> helps anyway.
>
>
>> Have fun
>> Sven
>>
>>
>>
>> On 02.12.2016 17:58, Martijn Dashorst wrote:
>>
>>> But it would add another reference to the component, increasing the
>>> footprint. It also enables you to 'bind' to another (unintended)
>>> component that's available in the scope.
>>>
>>> Label label1 = new Label(...);
>>> ...
>>> Label label4 = new Label(...);
>>>
>>> label1.add(Behavior.onTag(t->t.put(key, label4.getId()));
>>>
>>>
>>> When supplying the component as a second parameter in the onTag, you
>>> direct the developer to know what the intention is:
>>>
>>> label1.add(Behavior.onTag(t,c -> t.put(key, c.getId()));
>>>
>>> Martijn
>>>
>>>
>>>
>>>
>>> On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:
>>>
>>>> Hi,
>>>>
>>>> the behavior is added to a single component only and readily available
>>>> anyway in scope:
>>>>
>>>>       component.add(onTag(tag -> tag.put(key, component.getId()));
>>>>
>>>> What do we gain when the same component is  given as argument?
>>>>
>>>>       component.add(onTag(component, tag -> tag.put(key,
>>>> component.getId())));
>>>>
>>>> Note that the first component has a better type, the argument would just
>>>> be
>>>> a Component:
>>>>
>>>>       foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>>>>
>>>> Regards
>>>> Sven
>>>>
>>>>
>>>>
>>>> On 25.11.2016 20:51, Martin Grigorov wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
>>>>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>>>>> SerializableConsumer<ComponentTag> and ignores the Component parameter.
>>>>> I agree that having the component would be handy!
>>>>>
>>>>> Any good reasons why it should be like this ?
>>>>>
>>>>> 1.
>>>>>
>>>>> http://events.linuxfoundation.org/sites/events/files/slides/
>>>>> Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>>>>
>>>>>
>>>>> Martin Grigorov
>>>>> Wicket Training and Consulting
>>>>> https://twitter.com/mtgrigorov
>>>>>
>>>>>
>>>


Re: Behavior#onTag() doesn't have the Component

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

> Hi,
>
> I see your point.
>
> We could have both:
>
>   label1.add(Behavior.onTag(t->t.put(key, label1.getId()));
>   label1.add(Behavior.onTag((c, t)->t.put(key, c.getId()));
>
> Both the Eclipse and JDK compiler accept these.
> The component should come as first argument as in
> Behavior#onComponentTag(Component, ComponentTag) though.
>
> I'd like to preserve the first one because it's syntactically shorter.
>

It is shorter with three chars  "c, ". IMO one method is enough. The IDE
helps anyway.


>
> Have fun
> Sven
>
>
>
> On 02.12.2016 17:58, Martijn Dashorst wrote:
>
>> But it would add another reference to the component, increasing the
>> footprint. It also enables you to 'bind' to another (unintended)
>> component that's available in the scope.
>>
>> Label label1 = new Label(...);
>> ...
>> Label label4 = new Label(...);
>>
>> label1.add(Behavior.onTag(t->t.put(key, label4.getId()));
>>
>>
>> When supplying the component as a second parameter in the onTag, you
>> direct the developer to know what the intention is:
>>
>> label1.add(Behavior.onTag(t,c -> t.put(key, c.getId()));
>>
>> Martijn
>>
>>
>>
>>
>> On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:
>>
>>> Hi,
>>>
>>> the behavior is added to a single component only and readily available
>>> anyway in scope:
>>>
>>>      component.add(onTag(tag -> tag.put(key, component.getId()));
>>>
>>> What do we gain when the same component is  given as argument?
>>>
>>>      component.add(onTag(component, tag -> tag.put(key,
>>> component.getId())));
>>>
>>> Note that the first component has a better type, the argument would just
>>> be
>>> a Component:
>>>
>>>      foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>>>
>>> Regards
>>> Sven
>>>
>>>
>>>
>>> On 25.11.2016 20:51, Martin Grigorov wrote:
>>>
>>>> Hi,
>>>>
>>>> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
>>>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>>>> SerializableConsumer<ComponentTag> and ignores the Component parameter.
>>>> I agree that having the component would be handy!
>>>>
>>>> Any good reasons why it should be like this ?
>>>>
>>>> 1.
>>>>
>>>> http://events.linuxfoundation.org/sites/events/files/slides/
>>>> Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>>>
>>>>
>>>> Martin Grigorov
>>>> Wicket Training and Consulting
>>>> https://twitter.com/mtgrigorov
>>>>
>>>>
>>
>>
>

Re: Behavior#onTag() doesn't have the Component

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

I see your point.

We could have both:

   label1.add(Behavior.onTag(t->t.put(key, label1.getId()));
   label1.add(Behavior.onTag((c, t)->t.put(key, c.getId()));

Both the Eclipse and JDK compiler accept these.
The component should come as first argument as in Behavior#onComponentTag(Component, ComponentTag) though.

I'd like to preserve the first one because it's syntactically shorter.

Have fun
Sven
   


On 02.12.2016 17:58, Martijn Dashorst wrote:
> But it would add another reference to the component, increasing the
> footprint. It also enables you to 'bind' to another (unintended)
> component that's available in the scope.
>
> Label label1 = new Label(...);
> ...
> Label label4 = new Label(...);
>
> label1.add(Behavior.onTag(t->t.put(key, label4.getId()));
>
>
> When supplying the component as a second parameter in the onTag, you
> direct the developer to know what the intention is:
>
> label1.add(Behavior.onTag(t,c -> t.put(key, c.getId()));
>
> Martijn
>
>
>
>
> On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:
>> Hi,
>>
>> the behavior is added to a single component only and readily available
>> anyway in scope:
>>
>>      component.add(onTag(tag -> tag.put(key, component.getId()));
>>
>> What do we gain when the same component is  given as argument?
>>
>>      component.add(onTag(component, tag -> tag.put(key, component.getId())));
>>
>> Note that the first component has a better type, the argument would just be
>> a Component:
>>
>>      foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>>
>> Regards
>> Sven
>>
>>
>>
>> On 25.11.2016 20:51, Martin Grigorov wrote:
>>> Hi,
>>>
>>> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
>>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>>> SerializableConsumer<ComponentTag> and ignores the Component parameter.
>>> I agree that having the component would be handy!
>>>
>>> Any good reasons why it should be like this ?
>>>
>>> 1.
>>>
>>> http://events.linuxfoundation.org/sites/events/files/slides/Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>>
>>>
>>> Martin Grigorov
>>> Wicket Training and Consulting
>>> https://twitter.com/mtgrigorov
>>>
>
>


Re: Behavior#onTag() doesn't have the Component

Posted by Martijn Dashorst <ma...@gmail.com>.
But it would add another reference to the component, increasing the
footprint. It also enables you to 'bind' to another (unintended)
component that's available in the scope.

Label label1 = new Label(...);
...
Label label4 = new Label(...);

label1.add(Behavior.onTag(t->t.put(key, label4.getId()));


When supplying the component as a second parameter in the onTag, you
direct the developer to know what the intention is:

label1.add(Behavior.onTag(t,c -> t.put(key, c.getId()));

Martijn




On Fri, Nov 25, 2016 at 9:27 PM, Sven Meier <sv...@meiers.net> wrote:
> Hi,
>
> the behavior is added to a single component only and readily available
> anyway in scope:
>
>     component.add(onTag(tag -> tag.put(key, component.getId()));
>
> What do we gain when the same component is  given as argument?
>
>     component.add(onTag(component, tag -> tag.put(key, component.getId())));
>
> Note that the first component has a better type, the argument would just be
> a Component:
>
>     foo.add(onTag(tag -> tag.put(key, foo.getBar())));
>
> Regards
> Sven
>
>
>
> On 25.11.2016 20:51, Martin Grigorov wrote:
>>
>> Hi,
>>
>> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
>> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
>> SerializableConsumer<ComponentTag> and ignores the Component parameter.
>> I agree that having the component would be handy!
>>
>> Any good reasons why it should be like this ?
>>
>> 1.
>>
>> http://events.linuxfoundation.org/sites/events/files/slides/Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>>
>>
>> Martin Grigorov
>> Wicket Training and Consulting
>> https://twitter.com/mtgrigorov
>>
>



-- 
Become a Wicket expert, learn from the best: http://wicketinaction.com

Re: Behavior#onTag() doesn't have the Component

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

the behavior is added to a single component only and readily available 
anyway in scope:

     component.add(onTag(tag -> tag.put(key, component.getId()));

What do we gain when the same component is  given as argument?

     component.add(onTag(component, tag -> tag.put(key, 
component.getId())));

Note that the first component has a better type, the argument would just 
be a Component:

     foo.add(onTag(tag -> tag.put(key, foo.getBar())));

Regards
Sven


On 25.11.2016 20:51, Martin Grigorov wrote:
> Hi,
>
> At Martijn's slides from ApacheCon [1] I've noticed that critiques he
> mention is that org.apache.wicket.behavior.Behavior#onTag() uses
> SerializableConsumer<ComponentTag> and ignores the Component parameter.
> I agree that having the component would be handy!
>
> Any good reasons why it should be like this ?
>
> 1.
> http://events.linuxfoundation.org/sites/events/files/slides/Whats%20up%20with%20Wicket%208%20and%20Java%208.pdf
>
>
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>