You were right, fixed it On Wed, Apr 6, 2016 at 6:49 PM Martin Grigorov <[email protected]> wrote:
> Please read the answers. > On Apr 6, 2016 7:26 PM, "Ron Smits" <[email protected]> wrote: > > > This alas does not work:( > > > > First I am using wicket 7.2.0 and the getModelObject does not exist so I > > finally made: > > > > @Override > > protected void onComponentTag(ComponentTag tag) { > > add(new AttributeAppender("class", " number")); > > if(getDefaultModel().getObject() instanceof Number){ > > Number number = (Number) getDefaultModelObject(); > > if(number.doubleValue()<0.0) > > add(new AttributeAppender("class", " negative")); > > } > > } > > > > This however gives the following exception: > > > > org.apache.wicket.WicketRuntimeException: Cannot modify component > > hierarchy after render phase has started (page version cant change > > then anymore) > > at > > org.apache.wicket.Component.checkHierarchyChange(Component.java:3623) > > at org.apache.wicket.Component.addStateChange(Component.java:3538) > > at org.apache.wicket.Behaviors.add(Behaviors.java:55) > > at org.apache.wicket.Component.add(Component.java:4559) > > at > > > nl.codetribe.budget.web.common.MoneyLabel.onComponentTag(MoneyLabel.java:36) > > at > > org.apache.wicket.Component.internalRenderComponent(Component.java:2521) > > > > On Fri, Apr 1, 2016 at 3:11 PM Tobias Soloschenko > > [email protected] > > <http://mailto:[email protected]> wrote: > > > > Cool - thanks! > > > > > > kind regards > > > > > > Tobias > > > > > > > Am 01.04.2016 um 14:56 schrieb Martin Grigorov <[email protected] > >: > > > > > > > > I've added an example with > > > > > > > > > > https://github.com/apache/wicket/commit/2417322673238d57a794c237e84dd5dacf890804 > > > > > > > > I think we should explain that those are just convenience. It is > better > > > to > > > > use the "old way" one cares about memory usage. I'll add it soon. > > > > > > > > Martin Grigorov > > > > Wicket Training and Consulting > > > > https://twitter.com/mtgrigorov > > > > > > > > On Fri, Apr 1, 2016 at 2:48 PM, Tobias Soloschenko < > > > > [email protected]> wrote: > > > > > > > >> Hi, > > > >> > > > >> would be great to see some information how to use lambda models in > the > > > >> user guide. > > > >> > > > >> kind regards > > > >> > > > >> Tobias > > > >> > > > >>>> Am 01.04.2016 um 13:57 schrieb Martin Grigorov < > > [email protected] > > > >: > > > >>>> > > > >>>> On Fri, Apr 1, 2016 at 12:45 AM, Sven Meier <[email protected]> > > wrote: > > > >>>> > > > >>>> Hi, > > > >>>> > > > >>>> yeah, of course this is right: > > > >>>> > > > >>>> protected void onComponentTag(final ComponentTag tag) { > > > >>>> > > > >>>> if (getModelObject().doubleValue() < 0.0) { > > > >>>> tag.put("class", " negative"); > > > >>>> } > > > >>>> } > > > >>>> > > > >>>> Otherwise you'll end up with one additional behavior for each > > render - > > > >>>> stupid copy-paste error :/. > > > >>>> > > > >>>> BTW this might be an additional candidate for the new Wicket 8 > > > lambdas: > > > >>>> > > > >>>> label.add(onTag(tag -> if (getModelObject().doubleValue() < 0.0) > > > >>>> tag.put("class", "negative") )); > > > >>> > > > >>> +1 > > > >>> > > > >> > > > >> +1 > > > >> > > > >>> > > > >>>> > > > >>>> Sven > > > >>>> > > > >>>> > > > >>>> > > > >>>>> On 31.03.2016 21:16, Martin Grigorov wrote: > > > >>>>> > > > >>>>> Hi, > > > >>>>> > > > >>>>> On Thu, Mar 31, 2016 at 4:29 PM, Sven Meier <[email protected]> > > wrote: > > > >>>>> > > > >>>>> Hi, > > > >>>>>> > > > >>>>>> you can access a component's model with #getDefaultModel() or - > if > > > it > > > >> is > > > >>>>>> a > > > >>>>>> generic component - with #getModel(). > > > >>>>>> > > > >>>>>> To properly 'bind' to a model you should delay invocation of > > > >> #getObject() > > > >>>>>> as late as possible, so better overwrite #onComponentTag(): > > > >>>>>> > > > >>>>>> protected void onComponentTag(final ComponentTag tag) { > > > >>>>>> > > > >>>>>> if (getModelObject().doubleValue() < 0.0) { > > > >>>>>> add(new AttributeAppender("class", " negative")); > > > >>>>>> > > > >>>>>> Since you are in #onComponentTag() there is no reason to add a > > > >> Behavior. > > > >>>>> Just use the tag: tag.append("class", "negative", " "); > > > >>>>> > > > >>>>> > > > >>>>> } > > > >>>>>> } > > > >>>>>> > > > >>>>>> > > > >>>>>> Have fun > > > >>>>>> Sven > > > >>>>>> > > > >>>>>> > > > >>>>>> > > > >>>>>> > > > >>>>>> On 31.03.2016 16:06, Ron Smits wrote: > > > >>>>>> > > > >>>>>> I have searched but I dont find a clear way of getting the model > > > when > > > >> one > > > >>>>>>> is creating a custom component: > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> public MoneyLabel(String id) { > > > >>>>>>> super(id); > > > >>>>>>> add(new AttributeAppender("class", " number")); > > > >>>>>>> } > > > >>>>>>> > > > >>>>>>> It sounds like you always need the model. > > > >>>>> If there is a CompoundPropertyModel in the parents' hierarchy > then > > > move > > > >>>>> your logic to #onComponentTag(), as per Sven's suggestion. > > > >>>>> If there is no CPM in the parents then just remove this > > constructor. > > > >>>>> > > > >>>>> > > > >>>>> public MoneyLabel(String id, Model<? extends BigDecimal> > > > >> bigDecimalModel) > > > >>>>>>> { > > > >>>>>>> super(id, bigDecimalModel); > > > >>>>>>> add(new AttributeAppender("class", " number")); > > > >>>>>>> if (bigDecimalModel.getObject().doubleValue() < 0.0) { > > > >>>>>>> add(new AttributeAppender("class", " negative")); > > > >>>>>>> } > > > >>>>>>> } > > > >>>>>>> > > > >>>>>>> In the second constructor I can use the supplied model to > > determine > > > >> to > > > >>>>>>> add > > > >>>>>>> the negative class. However in the first constructor I cannot > > find > > > a > > > >> way > > > >>>>>>> to > > > >>>>>>> access the model. > > > >>>>>>> > > > >>>>>>> What am I missing? > > > >>>>>>> > > > >>>>>>> Ron > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> > > > --------------------------------------------------------------------- > > > >>>>>> To unsubscribe, e-mail: [email protected] > > > >>>>>> For additional commands, e-mail: [email protected] > > > >>>> > > > >>>> > > --------------------------------------------------------------------- > > > >>>> To unsubscribe, e-mail: [email protected] > > > >>>> For additional commands, e-mail: [email protected] > > > >>>> > > > >>>> > > > >> > > > >> > --------------------------------------------------------------------- > > > >> To unsubscribe, e-mail: [email protected] > > > >> For additional commands, e-mail: [email protected] > > > >> > > > >> > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [email protected] > > > For additional commands, e-mail: [email protected] > > > > > > > > >
