在Wicket页面加载的ObjectAutoCompleteField中显示初始选定的对象

在Wicket页面加载的ObjectAutoCompleteField中显示初始选定的对象,autocomplete,wicket,Autocomplete,Wicket,我已经遵循了让ObjectAutoCompleteField工作的方法,并且它做得非常好 不过,我有一个很大的问题,那就是在页面加载时在字段中显示初始设置的对象。该对象是从我用于使用ObjectAutoCompleteField的表单的模型中检索的。更改ObjectAutoCompleteField会更改它“连接”到的模型属性,并且该字段中的任何后续更改都会在其位置显示相应的标签,而不是页面加载时显示的初始标签。唯一显示的是编辑链接(以访问autocomplete功能) 我查阅了ObjectAu

我已经遵循了让ObjectAutoCompleteField工作的方法,并且它做得非常好

不过,我有一个很大的问题,那就是在页面加载时在字段中显示初始设置的对象。该对象是从我用于使用ObjectAutoCompleteField的表单的模型中检索的。更改ObjectAutoCompleteField会更改它“连接”到的模型属性,并且该字段中的任何后续更改都会在其位置显示相应的标签,而不是页面加载时显示的初始标签。唯一显示的是编辑链接(以访问autocomplete功能)


我查阅了ObjectAutoCompleteBuilder的文档,但没有找到任何相应的方法,甚至没有在页面加载时显式设置初始值。

我最终通过查看与ObjectAutoCompleteField相关的类找到了解决方案

ObjectAutoCompleteBuilder<Author, Long> builder = new ObjectAutoCompleteBuilder<Author, Long>(provider);
builder.readOnlyRenderer(new ObjectReadOnlyRenderer<Long>() {
    public Component getObjectRenderer(String id, IModel<Long> pModel, IModel<String> pSearchTextModel) {
        return new Label(id, new PropertyModel<Author>(model, "author"));
    }
});
ObjectAutoCompleteBuilder中的build方法构造ObjectAutoCompleteField。因此,通过在生成器上调用readOnlyRenderer方法,创建一个新的ObjectReadOnlyRenderer,在其getObjectRenderer中创建一个标签,我获得了ObjectAutoCompleteField来在页面加载时呈现一个预选对象

ObjectAutoCompleteBuilder<Author, Long> builder = new ObjectAutoCompleteBuilder<Author, Long>(provider);
builder.readOnlyRenderer(new ObjectReadOnlyRenderer<Long>() {
    public Component getObjectRenderer(String id, IModel<Long> pModel, IModel<String> pSearchTextModel) {
        return new Label(id, new PropertyModel<Author>(model, "author"));
    }
});
ObjectAutoCompleteBuilder builder=新的ObjectAutoCompleteBuilder(提供者);
builder.readOnlyRenderer(新对象readOnlyRenderer(){
公共组件getObjectRenderer(字符串id、IModel pModel、IModel pSearchTextModel){
返回新标签(id,新PropertyModel(型号,“作者”);
}
});
人们会认为这是标准行为,但现在我知道了,以供将来参考