Updated Branches: refs/heads/sandbox/hierarchy-completion 9a7bc7c27 -> 9a84f3865
hierarchy completion has to happen before onconfigure, otherwise enclosures wont work... Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9a84f386 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9a84f386 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9a84f386 Branch: refs/heads/sandbox/hierarchy-completion Commit: 9a84f3865ceb2ea612770512c0eee75120666f75 Parents: 9a7bc7c Author: Igor Vaynberg <[email protected]> Authored: Sun Jan 8 11:29:19 2012 -0800 Committer: Igor Vaynberg <[email protected]> Committed: Sun Jan 8 11:29:19 2012 -0800 ---------------------------------------------------------------------- .../src/main/java/org/apache/wicket/Component.java | 16 +++--- .../java/org/apache/wicket/MarkupContainer.java | 36 +-------------- 2 files changed, 9 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/9a84f386/wicket-core/src/main/java/org/apache/wicket/Component.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java index c335ddc..61dbf48 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Component.java +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java @@ -104,8 +104,7 @@ import org.slf4j.LoggerFactory; * concatenation with colon separators of each id along the way. For example, the path "a:b:c" would * refer to the component named "c" inside the MarkupContainer named "b" inside the container named * "a". The path to a component can be retrieved by calling {@link #getPath()}. To get a Component - * path relative to the page that contains it, you can call {@link #getPageRelativePath()}. - * </li> + * path relative to the page that contains it, you can call {@link #getPageRelativePath()}.</li> * <li><b>LifeCycle </b>- Components participate in the following lifecycle phases: * <ul> * <li><b>Construction </b>- A Component is constructed with the Java language new operator. @@ -113,8 +112,7 @@ import org.slf4j.LoggerFactory; * {@link IComponentInstantiationListener}s are notified of component instantiation. * <p> * {@link #onInitialize()} is called on the component as soon as the component is part of a page's - * component tree. At this state the component is able to access its markup. - * </li> + * component tree. At this state the component is able to access its markup.</li> * <li><b>Request Handling </b>- An incoming request is processed by a protocol request handler such * as {@link WicketFilter}. An associated Application object creates {@link Session}, * {@link Request} and {@link Response} objects for use by a given Component in updating its model @@ -970,8 +968,6 @@ public abstract class Component onBeforeRender(); - completeHierarchy(); - getApplication().getComponentPostOnBeforeRenderListeners().onBeforeRender(this); if (!getRequestFlag(RFLAG_BEFORE_RENDER_SUPER_CALL_VERIFIED)) @@ -1074,6 +1070,9 @@ public abstract class Component { clearEnabledInHierarchyCache(); clearVisibleInHierarchyCache(); + + completeHierarchy(); + onConfigure(); for (Behavior behavior : getBehaviors()) { @@ -2678,10 +2677,11 @@ public abstract class Component // to be backward compatible. WICKET-3761 getMarkupSourcingStrategy().renderHead(this, container); CharSequence headerContribution = markupHeaderResponse.getBuffer(); - if (Strings.isEmpty(headerContribution) == false) { + if (Strings.isEmpty(headerContribution) == false) + { response.render(StringHeaderItem.forString(headerContribution)); } - } + } finally { RequestCycle.get().setResponse(oldResponse); http://git-wip-us.apache.org/repos/asf/wicket/blob/9a84f386/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java index d25a466..14aecd7 100644 --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java @@ -21,10 +21,8 @@ import java.util.AbstractList; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Stack; import org.apache.wicket.markup.ComponentTag; @@ -256,8 +254,6 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp ComponentTag tag = null; - Map<Component, MarkupContainer> lateAdd = new HashMap<Component, MarkupContainer>(); - while (markup.hasMore()) { if (tag != null) @@ -357,17 +353,7 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp if (child != null && child.getParent() == null) { - if (parent.findParent(Page.class) != null) - { - // if the parent is linked to the page we will delay the lateadd call so - // onconfigure is now triggered on the child right away, but instead after its - // children have been resolved - lateAdd.put(child, parent); - } - else - { - lateAdd(parent, child); - } + parent.add(child); // TODO do we need to continue unqueuing or can we skip this component // and all its children if it has been deemed invisible? - dont think we can because // that will leave components in the queue and ondetach() will bomb @@ -426,26 +412,6 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp markup.skipToMatchingCloseTag(tag); } } - for (Map.Entry<Component, MarkupContainer> delayed : lateAdd.entrySet()) - { - lateAdd(delayed.getValue(), delayed.getKey()); - } - } - - private void lateAdd(MarkupContainer parent, Component queued) - { - parent.add(queued); - - // at this point queued.onInitialize() wouldve been called by add() - - if (parent.isVisibleInHierarchy()) - { - // TODO hierarchy completion: this call may not be necessary because if we are alrady in - // render this will be called from markupcontainer.add() - - // call configure() and onbeforerender() which are done from inside internalBeforeRender - queued.internalBeforeRender(); - } } /**
