Hi,
The TabbedPanel internaly uses a Loop to render the tab-components.
During a normla GET request the Loop.onPopulate() method ensures that
all the loop-childs are removed before adding them again
to support a possible change of teh underlying Integer-model.
Loop.onPopulate()
@Override
protected final void onPopulate()
{
// Remove any previous loop contents
removeAll();
// Get number of iterations
final int iterations = getIterations();
if (iterations > 0)
{
// Create LoopItems for each iteration
for (int iteration = 0; iteration < iterations; iteration++)
{
// Create item for loop iteration
LoopItem item = newItem(iteration);
// Add and populate item
add(item);
populateItem(item);
}
}
}
The TabbedPanel creates the following LoopItem which access the
ITab-List directly.
return new LoopItem(tabIndex)
{
private static final long serialVersionUID = 1L;
@Override
protected void onComponentTag(ComponentTag tag){...}
@Override
public boolean isVisible() {
// direct access of the tab
return getTabs().get(tabIndex).isVisible();
}
};
The problem now is, if the tabs-list is modfied for example deleted, the
onPopulate() method NEEDs to be invoked before
the LoopItem.isVisible() the ensure that the old-Loop-childs (LoopItem)
are deleted.
This does not happen (Why?) if the TabbedPanel is added/updated in an
ajax-call, resulting in ArrayIndexOufBounds-Exception
in the LoopItem.isVisible() Method. (tabs.get(tabIndex)).
My workaround currently is to invoke the onPopulate() manually during
deletion (by beforeRender()).
((MarkupContainer)temporalTabs.get("tabs-container")).get("tabs").beforeRender();
Any Ideas, how to force the onPopulate() get called - maybe invoking
modelChanged() on some component???
Thanks
Jens
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org