Re: Behavior#onTag() doesn't have the Component
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 Meierwrote: > 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 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 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 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 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
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 Meierwrote: 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 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 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 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
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 Meierwrote: > >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 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 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 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
>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 Meierwrote: 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 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 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
On Sat, Dec 3, 2016 at 12:20 PM, Sven Meierwrote: > 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 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 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
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 Meierwrote: 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 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
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 Meierwrote: > 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 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
Agreed! Thanks! Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Fri, Nov 25, 2016 at 9:27 PM, Sven Meierwrote: > 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 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
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 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