You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/02/19 08:55:29 UTC

[14/19] git commit: 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

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/reference-guide
Commit: 6b62a5077da354449a76ee209a4f0dea837bd919
Parents: 2672f88
Author: svenmeier <sv...@apache.org>
Authored: Fri Feb 15 12:44:26 2013 +0100
Committer: svenmeier <sv...@apache.org>
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)
 	{