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
>