Updated Branches:
  refs/heads/master 2672f886c -> 6b62a5077

WICKET-4998 + WICKET-4990 behaviors might be added via
IComponentInstantiationListeners, thus resulting in a
NullPointerException if AutoCompleteTextField adds its
AutoCompleteBehavior :( - now using trick with HeaderItem to make sure
the auto-complete event handler is able to register first

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/6b62a507
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/6b62a507
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/6b62a507

Branch: refs/heads/master
Commit: 6b62a5077da354449a76ee209a4f0dea837bd919
Parents: 2672f88
Author: svenmeier <[email protected]>
Authored: Fri Feb 15 12:44:26 2013 +0100
Committer: svenmeier <[email protected]>
Committed: Fri Feb 15 12:44:26 2013 +0100

----------------------------------------------------------------------
 .../autocomplete/AbstractAutoCompleteBehavior.java |   46 ++++++++++++++-
 .../html/autocomplete/AutoCompleteTextField.java   |   13 ----
 2 files changed, 43 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/6b62a507/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
index 6218e65..1d754dc 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
@@ -20,13 +20,16 @@ package 
org.apache.wicket.extensions.ajax.markup.html.autocomplete;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.head.HeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.IWrappedHeaderItem;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.head.ResourceAggregator;
+import org.apache.wicket.request.Response;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.resource.CoreLibrariesContributor;
 import org.apache.wicket.util.string.Strings;
 
 /**
@@ -36,6 +39,40 @@ import org.apache.wicket.util.string.Strings;
  */
 public abstract class AbstractAutoCompleteBehavior extends 
AbstractDefaultAjaxBehavior
 {
+       /**
+        * A wrapper for the auto-complete DOM-ready event handler.
+        * <p>
+        * A plain OnDomReadyItem would be aggregated by {@link 
ResourceAggregator}, possible coming
+        * after the event registration of other behaviors.
+        */
+       private static final class WrappedHeaderItem extends HeaderItem 
implements IWrappedHeaderItem
+       {
+               private final OnDomReadyHeaderItem item;
+
+               private WrappedHeaderItem(OnDomReadyHeaderItem onDomReady)
+               {
+                       item = onDomReady;
+               }
+
+               @Override
+               public void render(Response response)
+               {
+                       item.render(response);
+               }
+
+               @Override
+               public Iterable<?> getRenderTokens()
+               {
+                       return item.getRenderTokens();
+               }
+
+               @Override
+               public HeaderItem getWrapped()
+               {
+                       return item;
+               }
+       }
+
        private static final ResourceReference AUTOCOMPLETE_JS = new 
JavaScriptResourceReference(
                AutoCompleteBehavior.class, "wicket-autocomplete.js");
 
@@ -70,7 +107,7 @@ public abstract class AbstractAutoCompleteBehavior extends 
AbstractDefaultAjaxBe
        public void renderHead(final Component component, final IHeaderResponse 
response)
        {
                super.renderHead(component, response);
-               
CoreLibrariesContributor.contributeAjax(component.getApplication(), response);
+
                renderAutocompleteHead(response);
        }
 
@@ -96,7 +133,10 @@ public abstract class AbstractAutoCompleteBehavior extends 
AbstractDefaultAjaxBe
 
                String initJS = String.format("new 
Wicket.AutoComplete('%s','%s',%s,%s);", id,
                        getCallbackUrl(), constructSettingsJS(), indicatorId);
-               response.render(OnDomReadyHeaderItem.forScript(initJS));
+
+               final OnDomReadyHeaderItem onDomReady = 
OnDomReadyHeaderItem.forScript(initJS);
+
+               response.render(new WrappedHeaderItem(onDomReady));
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/6b62a507/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
index 12e28af..b31bff3 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
@@ -18,7 +18,6 @@ package 
org.apache.wicket.extensions.ajax.markup.html.autocomplete;
 
 import java.util.Iterator;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.ConverterLocator;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.ComponentTag;
@@ -265,18 +264,6 @@ public abstract class AutoCompleteTextField<T> extends 
TextField<T>
                }
        }
 
-       /**
-        * Initializes the {@link AutoCompleteBehavior} if it is not already 
there.
-        */
-       @Override
-       public Component add(Behavior... behaviors)
-       {
-               // the AutoCompleteBehavior must be bound first, see 
wicket-autocomplete.js
-               initializeAutoCompleteBehavior();
-
-               return super.add(behaviors);
-       }
-
        @Override
        protected void onComponentTag(final ComponentTag tag)
        {

Reply via email to