You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2008/07/28 20:25:31 UTC

[jira] Resolved: (WICKET-1736) Allow Access to AutoCompleteTextField AutoCompleteBehavior

     [ https://issues.apache.org/jira/browse/WICKET-1736?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg resolved WICKET-1736.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: 1.4-M4
                   1.3.5

> Allow Access to AutoCompleteTextField AutoCompleteBehavior
> ----------------------------------------------------------
>
>                 Key: WICKET-1736
>                 URL: https://issues.apache.org/jira/browse/WICKET-1736
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.3.4, 1.4-M2
>         Environment: N/A
>            Reporter: Will Hoover
>            Assignee: Igor Vaynberg
>             Fix For: 1.3.5, 1.4-M4
>
>
> Currently there is no easy way to access the AutoCompleteBehavior of the AutoCompleteTextField. This is useful when dynamically enabling/disabling the behavior (among other reasons). 
> The current code is:
> {code}
> 	public AutoCompleteTextField(String id, IModel model, Class type,
> 		IAutoCompleteRenderer renderer, AutoCompleteSettings settings)
> 	{
> 		super(id, model, type);
> 		// this disables Firefox autocomplete
> 		add(new SimpleAttributeModifier("autocomplete", "off"));
> 		add(new AutoCompleteBehavior(renderer, settings)
> 		{
> 			private static final long serialVersionUID = 1L;
> 			protected Iterator getChoices(String input)
> 			{
> 				return AutoCompleteTextField.this.getChoices(input);
> 			}
> 		});
> 	}
> {code}
> One solution to this is to extract the creation of the AutoCompleteBehavior to a method:
> {code}
> 	public AutoCompleteTextField(final String id, final IModel model, final Class<?> type, final IAutoCompleteRenderer renderer, final AutoCompleteSettings settings) {
> 		super(id, model, type);
> 		// this disables Firefox autocomplete
> 		add(new SimpleAttributeModifier("autocomplete", "off"));
> 		final AutoCompleteBehavior autoCompleteBehavior = createAutoCompleteBehavior(renderer, settings);
> 		if (autoCompleteBehavior == null) {
> 			throw new NullPointerException("Auto complete behavior cannot be null");
> 		}
> 		add(autoCompleteBehavior);
> 	}
> 	protected AutoCompleteChoiceBehavior createAutoCompleteBehavior(final IAutoCompleteRenderer renderer, final AutoCompleteSettings settings) {
> 		return new AutoCompleteChoiceBehavior(renderer, settings);
> 	}
> 	public class AutoCompleteChoiceBehavior extends AutoCompleteBehavior {
> 		public AutoCompleteChoiceBehavior(final IAutoCompleteRenderer renderer, final AutoCompleteSettings settings) {
> 			super(renderer, settings);
> 		}
> 		protected final Iterator<?> getChoices(final String input) {
> 			return AbstractAutoCompleteTextField.this.getChoices(input);
> 		}
> 	}
> {code}
> Also, when the auto-complete behavior is disabled [overriding the isEnable(component)] it currently does not clear the client events from the text field. A work around for this is to clear it out onCompoentTag (not the best option, but it works):
> {code}
> 	protected void onComponentTag(final ComponentTag tag) {
> 		if (!getAutoCompleteBehavior().isEnabled(this)) {
> 			// FIXME : Need to clear the events when the auto-complete behavior is disabled
> 			tag.put("onfocus", "this.onblur=null;this.onchange=null;this.onkeydown=null;this.onkeypress=null;this.onkeyup=null;");
> 		}
> 		super.onComponentTag(tag);
> 	}
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.