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

Reply via email to