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]
