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