Component's onAfterRender() is called so many times as it is depth in the 
component tree + 1
--------------------------------------------------------------------------------------------

                 Key: WICKET-4012
                 URL: https://issues.apache.org/jira/browse/WICKET-4012
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.5-RC7
            Reporter: Martin Grigorov


org.apache.wicket.Component.afterRender() calls 
org.apache.wicket.Component.onAfterRenderChildren() which for MarkupContainers 
calls afterRender() for its children.

So for code like:

 WebMarkupContainer comp1 = new WebMarkupContainer("c1");
        add(comp1);
        
        WebMarkupContainer comp2 = new WebMarkupContainer("c2");
        comp1.add(comp2);
        
        WebMarkupContainer comp3 = new WebMarkupContainer("c3") {

            @Override
            protected void onAfterRender() {
                super.onAfterRender();
                System.err.println("called");
            }
            
        };
        comp2.add(comp3);

you'll see "called" printed 4 times in a single request.

Additionally I think onAfterRenderChildren() should be called before 
onAfterRender() in Component.afterRender(). The flow should be first-in 
last-out: onBeforeRender > onBeforeRenderChildren > onAfterRenderChildren > 
onAfterRender,

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to