Java 通过鼠标单击进行选择时,Wicket autocomplete文本字段不会更新模型

Java 通过鼠标单击进行选择时,Wicket autocomplete文本字段不会更新模型,java,wicket,wicket-6,Java,Wicket,Wicket 6,我有wicket的自动完成文本字段。要更新模型,我使用“onblur”事件。 我需要在“onblur”事件发生后刷新文本字段,因为需要验证 下面是一个代码示例来说明这个问题 网页子类: public class TestPage extends WebPage { private Integer testField; public TestPage() { final List<Integer> allowedValues = new Array

我有wicket的
自动完成文本字段
。要更新模型,我使用“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);
            }
        });
    }
} 
<?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>
公共类测试页扩展网页{
私有整数测试字段;
公共测试页(){
最终列表allowedValues=new ArrayList();
对于(int i=0;i<5;i++){
允许值。加上(50+i*5);
}
最终PropertyModel testModel=新PropertyModel(此“测试字段”);
最终自动完成设置自动完成设置=新的自动完成设置();
自动完成设置。设置howlistonemptyInput(真);
自动完成设置。设置HowlistonFocusGain(真);
最终自动完成文本字段测试输入=
新的AutoCompleteTextField(“testInput”、testModel、AutoCompleteTSettings){
@凌驾
受保护的迭代器getChoices(最终字符串输入){
返回allowedValues.iterator();
}
};
testInput.setOutputMarkupId(true);
setMarkupId(“testInput”);
添加(测试输入);
添加(新的AjaxFormComponentUpdateBehavior(“onblur”){
@凌驾
受保护的void onUpdate(最终AjaxRequestTarget目标){
添加(测试输入);
}
});
}
} 
对应的HTML:

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);
            }
        });
    }
} 
<?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
被触发)

我曾尝试将
ajaxFormComponentUpdateBehavior(“onblur”)
OnChangeAjaxBehavior
结合使用,但我遇到了相同的问题:无法通过鼠标单击选择值,因为“onblur”在“onchange”之前触发

请注意,如果您评论行
target.add(testInput),它将按预期工作

它似乎和这个小门很相似

它说6.18.0版本已经解决了这个问题,但我使用的是Wicket 6.18.0,仍然存在这个问题

我们一直在执行从Wicket 1.4到Wicket 6的升级。在Wicket 1.4中,它运行良好


请就如何解决这个问题给我一些建议。我们将非常感谢你的帮助。提前感谢。

我建议您使用wicket Jquery UI自动完成框:

Html:


Wicket-jQuery用户界面:自动完成
.ui自动完成{
最大高度:200px;
溢出y:自动;
溢出x:隐藏;
右边填充:20px;
}   
选择你最喜欢的摇滚类型:(从你的标准开始)



爪哇

package com.googlecode.wicket.jquery.ui.samples.pages.autocomplete;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入org.apache.wicket.ajax.AjaxRequestTarget;
导入org.apache.wicket.markup.html.form.form;
导入org.apache.wicket.markup.html.panel.FeedbackPanel;
导入org.apache.wicket.model.model;
导入com.googlecode.wicket.jquery.ui.form.autocomplete.AutoCompleteTextField;
导入com.googlecode.wicket.jquery.ui.panel.JQueryFeedbackPanel;
公共类DefaultAutoCompletePage扩展了AbstractAutoCompletePage
{
私有静态最终长serialVersionUID=1L;
私有静态最终列表选项=数组。asList(“酸性摇滚”、“另类金属”、“另类摇滚”、“无政府朋克”、“艺术朋克”、“艺术摇滚”、“节拍音乐”、“黑色金属”、“蓝调摇滚”、“英国流行音乐”、“坎特伯雷场景”,
“中国摇滚”、“基督教金属”、“交叉鞭打金属”、“硬壳朋克”、“硬壳研磨”、“黑暗夜总会”、“死亡金属”、“死亡之核”、“死亡之魂”、“沙漠摇滚”、“Djent”、“末日金属”、“梦幻流行”、“无人机金属”,
“达尼丁之声”、“电子摇滚”、“Emo”、“实验摇滚”、“民间金属”、“民间摇滚”、“怪物之声”、“Funk金属”、“车库朋克”、“车库摇滚”、“Glam金属”、“Glam摇滚”、“Goregrind”、“哥特金属”、“哥特摇滚”,
“Grindcore”,“Groove metal”,“Grunge”,“Hard rock”,“Hardcore朋克”,“重金属”,“独立流行音乐”,“独立摇滚”,“工业金属”,“工业摇滚”,“J摇滚”,“爵士摇滚”,“Krautrock”,“数学摇滚”,“Mathcore”,
“旋律死亡金属”、“旋律金属核心”、“金属核心”、“新幻觉”、“新进展”、“新浪潮”、“无波”、“噪音流行”、“噪音摇滚”、“噪音风”、“怒族金属”、“佩斯利地下”、“流行朋克”、“流行摇滚”、“色情乐园”,
“后英国流行音乐”、“后垃圾”、“后铁杆”、“后金属”、“后朋克”、“后朋克复兴”、“后摇滚”、“权力金属”、“权力流行音乐”、“进步金属”、“进步摇滚”、“迷幻摇滚”、“心理比利”、“朋克摇滚”,
“Raga rock”、“Rap metal”、“Rap rock”、“Rapcore”、“Riot Grrl”、“rock and roll”、“rock en Español”、“rock in反对派”、“Sadcore”、“Screamo”、“Shoegazer”、“Slowcore”、“Slud metal”、“软摇滚”、“Southern rock”、“Space rock”,
“速度金属”、“斯通纳摇滚”、“苏菲摇滚”、“冲浪摇滚”、“交响金属”、“技术死亡金属”、“鞭打金属”、“鞭打核心”、“特威流行音乐”、“非黑色金属”、“世界融合”);
公共DefaultAutoCompletePage()
{
//形式//
最终形式=新形式(“形式”);
本条增补(表格);
//反馈面板//
最终反馈面板反馈=新的JQueryFeedbackPanel(“反馈”);
add(feedback.setOutputMarkupId(true));
//自动完成//
表单。添加(新的自动压缩)