Description
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:
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); } }); }
One solution to this is to extract the creation of the AutoCompleteBehavior to a method:
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); } }