我有检票口AutoCompleteTextField
。要更新模型,我使用“onblur”事件。而且我需要在“onblur”事件发生后刷新文本字段,因为需要验证。
这是说明问题的代码示例
网页子类:
public class TestPage extends WebPage {
private Integer testField;
public TestPage() {
final List<Integer> allowedValues = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
allowedValues.add(50 + i * 5);
}
final PropertyModel<Integer> testModel = new PropertyModel<Integer>(this, "testField");
final AutoCompleteSettings autoCompleteSettings = new AutoCompleteSettings();
autoCompleteSettings.setShowListOnEmptyInput(true);
autoCompleteSettings.setShowListOnFocusGain(true);
final AutoCompleteTextField<Integer> testInput =
new AutoCompleteTextField<Integer>("testInput", testModel, autoCompleteSettings) {
@Override
protected Iterator<Integer> getChoices(final String input) {
return allowedValues.iterator();
}
};
testInput.setOutputMarkupId(true);
testInput.setMarkupId("testInput");
add(testInput);
testInput.add(new AjaxFormComponentUpdatingBehavior("onblur") {
@Override
protected void onUpdate(final AjaxRequestTarget target) {
target.add(testInput);
}
});
}
}
对应的HTML:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" xml:lang="en"
lang="en">
<body>
<input type="text" wicket:id="testInput"/>
</body>
</html>
问题是无法通过鼠标单击来选择值。
我尝试过使用OnChangeAjaxBehavior
- 并且通过鼠标单击进行选择可以工作,但我不想在每次更改后都执行验证(例如,用户想要输入 54,他输入 5 => 验证开始,因为OnChangeAjaxBehavior
被解雇了)
我尝试使用两者的组合, AjaxFormComponentUpdatingBehavior("onblur")
并且OnChangeAjaxBehavior
我遇到了同样的问题:无法通过鼠标单击选择值,因为在 'onchange' 之前触发了 'onblur'
请注意,如果您评论该行target.add(testInput);
,它将按预期工作。
它似乎类似于这个 Wicket问题
它说该问题已针对 6.18.0 版本进行了修复,但我完全使用 Wicket 6.18.0 并且仍然存在此问题。
我们一直在从 Wicket 1.4 升级到 wicket 6。在 Wicket 1.4 中它运行良好。
请就如何解决此问题给我任何建议。您的帮助将不胜感激。提前致谢。