You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2017/03/27 15:28:46 UTC

wicket git commit: WICKET-6347 added #detach() to all renderers

Repository: wicket
Updated Branches:
  refs/heads/WICKET-6347-detachable-renderers [created] 0bc929d71


WICKET-6347 added #detach() to all renderers

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

Branch: refs/heads/WICKET-6347-detachable-renderers
Commit: 0bc929d71865f052e895fd0918ea297acc7086fa
Parents: 3179d34
Author: Sven Meier <sv...@apache.org>
Authored: Mon Mar 27 17:27:20 2017 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Mon Mar 27 17:27:20 2017 +0200

----------------------------------------------------------------------
 .../wicket/markup/html/form/AbstractChoice.java      |  8 ++++++++
 .../wicket/markup/html/form/IChoiceRenderer.java     | 15 ++++++++++++---
 .../ajax/markup/html/AjaxEditableChoiceLabel.java    |  3 +++
 .../html/autocomplete/AutoCompleteBehavior.java      |  7 +++++++
 .../html/autocomplete/AutoCompleteTextField.java     |  8 ++++++++
 .../html/autocomplete/IAutoCompleteRenderer.java     | 11 +++++++++--
 .../extensions/markup/html/form/palette/Palette.java |  2 ++
 .../markup/html/form/select/IOptionRenderer.java     | 12 ++++++++++--
 .../markup/html/form/select/SelectOptions.java       |  8 ++++++++
 9 files changed, 67 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
index 523116e..fd1cacf 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
@@ -501,4 +501,12 @@ public abstract class AbstractChoice<T, E> extends FormComponent<T>
 			"This class does not support type-conversion because it is performed "
 				+ "exclusively by the IChoiceRenderer assigned to this component");
 	}
+	
+	@Override
+	protected void onDetach()
+	{
+		renderer.detach();
+		
+		super.onDetach();
+	};
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java
index c8345d4..5fcc14e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java
@@ -18,8 +18,8 @@ package org.apache.wicket.markup.html.form;
 
 import java.util.List;
 
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.util.io.IClusterable;
 
 /**
  * Renders one choice. Separates the 'id' values used for internal representation from 'display
@@ -30,7 +30,7 @@ import org.apache.wicket.util.io.IClusterable;
  * @param <T>
  *            The model object type
  */
-public interface IChoiceRenderer<T> extends IClusterable
+public interface IChoiceRenderer<T> extends IDetachable
 {
 	/**
 	 * Get the value for displaying to an end user.
@@ -70,4 +70,13 @@ public interface IChoiceRenderer<T> extends IClusterable
 	 * @return A choice from the list that has this {@code id}
 	 */
 	T getObject(String id, IModel<? extends List<? extends T>> choices);
-}
+
+	/**
+	 * Override when needed.
+	 */
+	@Override
+	default void detach()
+	{
+	}
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
index 2afe6cf..221a42f 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
@@ -324,6 +324,9 @@ public class AjaxEditableChoiceLabel<T> extends AjaxEditableLabel<T>
 		{
 			choices.detach();
 		}
+		
+		renderer.detach();
+		
 		super.onDetach();
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
index 02472ac..5f5453a 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
@@ -19,6 +19,7 @@ package org.apache.wicket.extensions.ajax.markup.html.autocomplete;
 import java.util.Iterator;
 
 import org.apache.wicket.Application;
+import org.apache.wicket.Component;
 import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.cycle.RequestCycle;
@@ -129,4 +130,10 @@ public abstract class AutoCompleteBehavior<T> extends AbstractAutoCompleteBehavi
 	 * @return iterator over all possible choice objects
 	 */
 	protected abstract Iterator<T> getChoices(String input);
+
+	@Override
+	public void detach(Component component)
+	{
+		renderer.detach();
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/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 79b86ea..70536e4 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
@@ -307,4 +307,12 @@ public abstract class AutoCompleteTextField<T> extends TextField<T>
 	{
 		return renderer;
 	}
+	
+	@Override
+	protected void onDetach()
+	{
+		renderer.detach();
+		
+		super.onDetach();
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
index c2d0a5f..55a0d6b 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
@@ -16,8 +16,8 @@
  */
 package org.apache.wicket.extensions.ajax.markup.html.autocomplete;
 
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.request.Response;
-import org.apache.wicket.util.io.IClusterable;
 
 /**
  * A renderer used to generate html output for the {@link AutoCompleteBehavior}.
@@ -60,7 +60,7 @@ import org.apache.wicket.util.io.IClusterable;
  * @author Janne Hietam&auml;ki (jannehietamaki)
  * 
  */
-public interface IAutoCompleteRenderer<T> extends IClusterable
+public interface IAutoCompleteRenderer<T> extends IDetachable
 {
 	/**
 	 * Render the html fragment for the given completion object. Usually the html is written out by
@@ -94,4 +94,11 @@ public interface IAutoCompleteRenderer<T> extends IClusterable
 	 */
 	void renderFooter(Response response, int count);
 
+	/**
+	 * Override when needed.
+	 */
+	@Override
+	default void detach()
+	{
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java
index 5f8c5f5..93432f9 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java
@@ -671,6 +671,8 @@ public class Palette<T> extends FormComponentPanel<Collection<T>>
 		// an alternative might be to attach it to one of the subcomponents
 		choicesModel.detach();
 
+		choiceRenderer.detach();
+
 		super.onDetach();
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/IOptionRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/IOptionRenderer.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/IOptionRenderer.java
index e641c57..1854a19 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/IOptionRenderer.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/IOptionRenderer.java
@@ -16,8 +16,8 @@
  */
 package org.apache.wicket.extensions.markup.html.form.select;
 
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.util.io.IClusterable;
 
 /**
  * @param <T>
@@ -25,7 +25,7 @@ import org.apache.wicket.util.io.IClusterable;
  * @author Igor Vaynberg (ivaynberg)
  * 
  */
-public interface IOptionRenderer<T> extends IClusterable
+public interface IOptionRenderer<T> extends IDetachable
 {
 	/**
 	 * Get the value for displaying to the user.
@@ -45,4 +45,12 @@ public interface IOptionRenderer<T> extends IClusterable
 	 * @return model that will contain the value object
 	 */
 	IModel<T> getModel(T value);
+
+	/**
+	 * Override when needed.
+	 */
+	@Override
+	default void detach()
+	{
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0bc929d7/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java
index e0d338e..fdf22c1 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/SelectOptions.java
@@ -185,4 +185,12 @@ public class SelectOptions<T> extends RepeatingView
 			tag.setType(TagType.OPEN);
 		}
 	}
+	
+	@Override
+	protected void onDetach()
+	{
+		renderer.detach();
+		
+		super.onDetach();
+	}
 }


Re: wicket git commit: WICKET-6347 added #detach() to all renderers

Posted by Martin Grigorov <mg...@apache.org>.
Hi Sven,

One minor issue: the renderer is optional (i.e. null-able) in some classes,
so you will have to check before calling its #detach() method. For example
in AjaxEditableChoiceLabel

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Mon, Mar 27, 2017 at 5:28 PM, <sv...@apache.org> wrote:

> Repository: wicket
> Updated Branches:
>   refs/heads/WICKET-6347-detachable-renderers [created] 0bc929d71
>
>
> WICKET-6347 added #detach() to all renderers
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0bc929d7
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0bc929d7
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0bc929d7
>
> Branch: refs/heads/WICKET-6347-detachable-renderers
> Commit: 0bc929d71865f052e895fd0918ea297acc7086fa
> Parents: 3179d34
> Author: Sven Meier <sv...@apache.org>
> Authored: Mon Mar 27 17:27:20 2017 +0200
> Committer: Sven Meier <sv...@apache.org>
> Committed: Mon Mar 27 17:27:20 2017 +0200
>
> ----------------------------------------------------------------------
>  .../wicket/markup/html/form/AbstractChoice.java      |  8 ++++++++
>  .../wicket/markup/html/form/IChoiceRenderer.java     | 15 ++++++++++++---
>  .../ajax/markup/html/AjaxEditableChoiceLabel.java    |  3 +++
>  .../html/autocomplete/AutoCompleteBehavior.java      |  7 +++++++
>  .../html/autocomplete/AutoCompleteTextField.java     |  8 ++++++++
>  .../html/autocomplete/IAutoCompleteRenderer.java     | 11 +++++++++--
>  .../extensions/markup/html/form/palette/Palette.java |  2 ++
>  .../markup/html/form/select/IOptionRenderer.java     | 12 ++++++++++--
>  .../markup/html/form/select/SelectOptions.java       |  8 ++++++++
>  9 files changed, 67 insertions(+), 7 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/AbstractChoice.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractChoice.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/AbstractChoice.java
> index 523116e..fd1cacf 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/AbstractChoice.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/AbstractChoice.java
> @@ -501,4 +501,12 @@ public abstract class AbstractChoice<T, E> extends
> FormComponent<T>
>                         "This class does not support type-conversion
> because it is performed "
>                                 + "exclusively by the IChoiceRenderer
> assigned to this component");
>         }
> +
> +       @Override
> +       protected void onDetach()
> +       {
> +               renderer.detach();
> +
> +               super.onDetach();
> +       };
>  }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-core/src/main/java/org/apache/wicket/markup/
> html/form/IChoiceRenderer.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IChoiceRenderer.java
> b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/IChoiceRenderer.java
> index c8345d4..5fcc14e 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/IChoiceRenderer.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/
> form/IChoiceRenderer.java
> @@ -18,8 +18,8 @@ package org.apache.wicket.markup.html.form;
>
>  import java.util.List;
>
> +import org.apache.wicket.model.IDetachable;
>  import org.apache.wicket.model.IModel;
> -import org.apache.wicket.util.io.IClusterable;
>
>  /**
>   * Renders one choice. Separates the 'id' values used for internal
> representation from 'display
> @@ -30,7 +30,7 @@ import org.apache.wicket.util.io.IClusterable;
>   * @param <T>
>   *            The model object type
>   */
> -public interface IChoiceRenderer<T> extends IClusterable
> +public interface IChoiceRenderer<T> extends IDetachable
>  {
>         /**
>          * Get the value for displaying to an end user.
> @@ -70,4 +70,13 @@ public interface IChoiceRenderer<T> extends IClusterable
>          * @return A choice from the list that has this {@code id}
>          */
>         T getObject(String id, IModel<? extends List<? extends T>>
> choices);
> -}
> +
> +       /**
> +        * Override when needed.
> +        */
> +       @Override
> +       default void detach()
> +       {
> +       }
> +
> +}
> \ No newline at end of file
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-extensions/src/main/java/org/apache/
> wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
> b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
> index 2afe6cf..221a42f 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
> @@ -324,6 +324,9 @@ public class AjaxEditableChoiceLabel<T> extends
> AjaxEditableLabel<T>
>                 {
>                         choices.detach();
>                 }
> +
> +               renderer.detach();
> +
>                 super.onDetach();
>         }
>  }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-extensions/src/main/java/org/apache/
> wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
> b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
> index 02472ac..5f5453a 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/AutoCompleteBehavior.java
> @@ -19,6 +19,7 @@ package org.apache.wicket.extensions.
> ajax.markup.html.autocomplete;
>  import java.util.Iterator;
>
>  import org.apache.wicket.Application;
> +import org.apache.wicket.Component;
>  import org.apache.wicket.request.IRequestCycle;
>  import org.apache.wicket.request.IRequestHandler;
>  import org.apache.wicket.request.cycle.RequestCycle;
> @@ -129,4 +130,10 @@ public abstract class AutoCompleteBehavior<T> extends
> AbstractAutoCompleteBehavi
>          * @return iterator over all possible choice objects
>          */
>         protected abstract Iterator<T> getChoices(String input);
> +
> +       @Override
> +       public void detach(Component component)
> +       {
> +               renderer.detach();
> +       }
>  }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/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 79b86ea..70536e4 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
> @@ -307,4 +307,12 @@ public abstract class AutoCompleteTextField<T>
> extends TextField<T>
>         {
>                 return renderer;
>         }
> +
> +       @Override
> +       protected void onDetach()
> +       {
> +               renderer.detach();
> +
> +               super.onDetach();
> +       }
>  }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-extensions/src/main/java/org/apache/
> wicket/extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
> b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
> index c2d0a5f..55a0d6b 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/ajax/markup/html/autocomplete/IAutoCompleteRenderer.java
> @@ -16,8 +16,8 @@
>   */
>  package org.apache.wicket.extensions.ajax.markup.html.autocomplete;
>
> +import org.apache.wicket.model.IDetachable;
>  import org.apache.wicket.request.Response;
> -import org.apache.wicket.util.io.IClusterable;
>
>  /**
>   * A renderer used to generate html output for the {@link
> AutoCompleteBehavior}.
> @@ -60,7 +60,7 @@ import org.apache.wicket.util.io.IClusterable;
>   * @author Janne Hietam&auml;ki (jannehietamaki)
>   *
>   */
> -public interface IAutoCompleteRenderer<T> extends IClusterable
> +public interface IAutoCompleteRenderer<T> extends IDetachable
>  {
>         /**
>          * Render the html fragment for the given completion object.
> Usually the html is written out by
> @@ -94,4 +94,11 @@ public interface IAutoCompleteRenderer<T> extends
> IClusterable
>          */
>         void renderFooter(Response response, int count);
>
> +       /**
> +        * Override when needed.
> +        */
> +       @Override
> +       default void detach()
> +       {
> +       }
>  }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-extensions/src/main/java/org/apache/
> wicket/extensions/markup/html/form/palette/Palette.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/palette/Palette.java
> b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/palette/Palette.java
> index 5f8c5f5..93432f9 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/palette/Palette.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/palette/Palette.java
> @@ -671,6 +671,8 @@ public class Palette<T> extends
> FormComponentPanel<Collection<T>>
>                 // an alternative might be to attach it to one of the
> subcomponents
>                 choicesModel.detach();
>
> +               choiceRenderer.detach();
> +
>                 super.onDetach();
>         }
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-extensions/src/main/java/org/apache/
> wicket/extensions/markup/html/form/select/IOptionRenderer.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/IOptionRenderer.java
> b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/IOptionRenderer.java
> index e641c57..1854a19 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/IOptionRenderer.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/IOptionRenderer.java
> @@ -16,8 +16,8 @@
>   */
>  package org.apache.wicket.extensions.markup.html.form.select;
>
> +import org.apache.wicket.model.IDetachable;
>  import org.apache.wicket.model.IModel;
> -import org.apache.wicket.util.io.IClusterable;
>
>  /**
>   * @param <T>
> @@ -25,7 +25,7 @@ import org.apache.wicket.util.io.IClusterable;
>   * @author Igor Vaynberg (ivaynberg)
>   *
>   */
> -public interface IOptionRenderer<T> extends IClusterable
> +public interface IOptionRenderer<T> extends IDetachable
>  {
>         /**
>          * Get the value for displaying to the user.
> @@ -45,4 +45,12 @@ public interface IOptionRenderer<T> extends IClusterable
>          * @return model that will contain the value object
>          */
>         IModel<T> getModel(T value);
> +
> +       /**
> +        * Override when needed.
> +        */
> +       @Override
> +       default void detach()
> +       {
> +       }
>  }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 0bc929d7/wicket-extensions/src/main/java/org/apache/
> wicket/extensions/markup/html/form/select/SelectOptions.java
> ----------------------------------------------------------------------
> diff --git a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/SelectOptions.java
> b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/SelectOptions.java
> index e0d338e..fdf22c1 100644
> --- a/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/SelectOptions.java
> +++ b/wicket-extensions/src/main/java/org/apache/wicket/
> extensions/markup/html/form/select/SelectOptions.java
> @@ -185,4 +185,12 @@ public class SelectOptions<T> extends RepeatingView
>                         tag.setType(TagType.OPEN);
>                 }
>         }
> +
> +       @Override
> +       protected void onDetach()
> +       {
> +               renderer.detach();
> +
> +               super.onDetach();
> +       }
>  }
>
>