That's an idea too. It's an extra method (not so nice) but more pricise (nice).

I'm fine with either. What do others think?

Eelco


On 3/31/07, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
or add a replaceOrAdd() method

-igor


On 3/31/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote:
>
> I'm backporting Wicket In Action's code currently, and stumbled upon
> something I really liked to be able to do in 2.0 which I can't do in
> the same way in 1.3.
>
> Consider this:
>
>   void setContentPanel() {
>     if (inEditMode) {
>       new DiscountsEditList(this, "content");
>     } else {
>       new DiscountsList(this, "content");
>     }
>   }
>
> I'd like to be able to write that as:
>
>   void setContentPanel() {
>     if (inEditMode) {
>       replace(new DiscountsEditList("content"));
>     } else {
>       replace(new DiscountsList("content"));
>     }
>   }
>
> However, there is this check in replace:
>
>                         // Add to map
>                         final Component replaced = put(child);
>
>                         // Look up to make sure it was already in the map
>                         if (replaced == null)
>                         {
>                                 throw new WicketRuntimeException(
>                                                 exceptionMessage("Cannot
> replace a component which has not been
> added: id='"
>                                                                 +
> child.getId() + "', component=" + child));
>                         }
>
> so I'd have to do something like:
>
>       if (get("content") != null) {
>         replace(new DiscountsEditList("content"));
>       } else {
>         add(new DiscountsEditList("content"));
>       }
>
> yech. I really don't see the added value of that check. I understand
> how it got in there, but when you think of it, what actual problem
> would this solve? Imo, we should just get rid of that check so that
> calling replace would be a simple add if the component wasn't added
> yet.
>
> Eelco
>

Reply via email to