Wicket-选择对象时的下拉选择

Wicket-选择对象时的下拉选择,wicket,dropdownchoice,Wicket,Dropdownchoice,我对下拉选择有问题。我必须预先选择一个项目,但是我找到的每一个教程和示例,只考虑原始类型的列表。 我有一张物品清单。 类myObject{ 私有字符串名称; 私家姓; [塞特和盖特] } 在其他班级 List myList=some_data_retrieve(); MyObject defaultValue=一些简单的数据检索(); 要使用以下构造函数构建DropDownChoice im: final DropDownChoice ddc=新的DropDownChoice(id、数据

我对下拉选择有问题。我必须预先选择一个项目,但是我找到的每一个教程和示例,只考虑原始类型的列表。

我有一张物品清单。

类myObject{
私有字符串名称;
私家姓;
[塞特和盖特]
} 
在其他班级

List myList=some_data_retrieve();
MyObject defaultValue=一些简单的数据检索();
要使用以下构造函数构建DropDownChoice im:

final DropDownChoice ddc=新的DropDownChoice(id、数据、新的choicenderer(choicenderexpression、choicendereridexpression));
这样:

final DropDownChoice ddc=新的DropDownChoice(“wicket_id”,myList,new Choicenderer(“姓名”);
现在。在每个教程/示例中,他们都使用另一个带模型的构造函数。例如:

private static final List SEARCH\u ENGINES=Arrays.asList(新字符串[]){
“谷歌”、“必应”、“百度”});
选择私有字符串=“谷歌”;
DropDownChoice listSites=新的DropDownChoice(
“站点”、新PropertyModel(本“选定”)、搜索引擎;
我尝试过类似的方法来模拟这种调用:

final-DropDownChoice ddc=new-DropDownChoice(“wicket_id”、new-PropertyModel(“defaultValue”)、myList、new-choicenderer(“name”、“姓氏”);
但我得到的是一个错误:

没有为class:package$WicketPage表达式:defaultValue定义get方法
请帮我了解一下


谢谢

这意味着您需要在添加DropDownChoice的页面或组件中添加“defaultValue”的getter和setter

public class MyPage extends WebPage {

    private MyObject defaultValue;

    public MyPage(PageParameters pageParameters) {
        super(pageParameters);

        defaultValue = some_simple_data_retrieve();
        List<MyObject> myList = some_data_retrieve();

        add(new DropDownChoice<myObject>(
                       "wicket_id",
                       new PropertyModel<MyObject>(this,"defaultValue"),
                       myList, 
                       new ChoiceRenderer<MyObject>("name", "surname")
        );           
    }

    public MyObject getDefaultValue() {
        return defaultValue;
    }

    public void setDefaultValue(MyObject defaultValue) {
        this.defaultValue = defaultValue;
    }
}
公共类MyPage扩展网页{
私有对象默认值;
公共MyPage(页面参数页面参数){
超级(页面参数);
defaultValue=一些简单的数据检索();
List myList=some_data_retrieve();
添加(新的下拉选择)(
“wicket_id”,
新PropertyModel(此“defaultValue”),
myList,
新选秀人(“姓名”、“姓氏”)
);           
}
公共MyObject getDefaultValue(){
返回默认值;
}
public void setDefaultValue(MyObject defaultValue){
this.defaultValue=defaultValue;
}
}

PropertyModel
是解决此类问题的好选择。
MyObject
是一个对象,有一个字符串
name
。我已将其中的
toString()
方法重写为name,它工作正常。我建议使用此方法

topicDropDown = new DropDownChoice<MyObject>("wicktID", new PropertyModel<MyObject>       (this.object, "exp"), new LoadableDetachableModel<List<MyObject>>() {
        @Override
        protected List<MyObject> load() {
            return top.getAllObjects();

        }
topicDropDown=new-DropDownChoice(“wicktID”,new-PropertyModel(this.object,“exp”),new-LoadableDetachableModel(){
@凌驾
受保护列表加载(){
返回top.getAllObject();
}

构造函数中的第二个参数是所选元素的模型。不是默认值的模型。这就是我对wicket的理解。