[
https://issues.apache.org/jira/browse/WICKET-1736?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Will Hoover updated WICKET-1736:
--------------------------------
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:
{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}
was:
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 =
getAutoCompleteBehavior(renderer, settings);
if (autoCompleteBehavior == null) {
throw new NullPointerException("Auto complete behavior
cannot be null");
}
add(autoCompleteBehavior);
}
protected AutoCompleteChoiceBehavior getAutoCompleteBehavior(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}
> 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
>
> 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.