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") ));

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]

Reply via email to