Wicket - 选择对象的DropDownChoice

MrM*_*ime 4 wicket dropdownchoice

我有一个DropDownChoice的问题.我必须预先选择一个项目,但我找到的每个教程和示例,只考虑一个基本类型的列表.

我有一个Object列表.

class myObject {
   private String name;
   private String surname;
   [setter and getter]
} 
Run Code Online (Sandbox Code Playgroud)

在其他课堂上

List<MyObject> myList = some_data_retrieve();
MyObject defaultValue = some_simple_data_retrieve();
Run Code Online (Sandbox Code Playgroud)

使用以下构造器构建DropDownChoice:

final DropDownChoice<T> ddc = new DropDownChoice<T>(id, data, new ChoiceRenderer<T>(choiceRendererExpression, choiceRendererIdExpression));
Run Code Online (Sandbox Code Playgroud)

通过这种方式:

final DropDownChoice<myObject> ddc = new DropDownChoice<myObject>("wicket_id", myList, new ChoiceRenderer<myObject>("name", "surname"));
Run Code Online (Sandbox Code Playgroud)

现在.在每个教程/示例中,他们使用另一个带有Model的构造函数.例如:

private static final List<String> SEARCH_ENGINES = Arrays.asList(new String[] {
        "Google", "Bing", "Baidu" });
private String selected = "Google";
DropDownChoice<String> listSites = new DropDownChoice<String>(
        "sites", new PropertyModel<String>(this, "selected"), SEARCH_ENGINES);
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情来模仿那种电话:

final DropDownChoice<myObject> ddc = new DropDownChoice<myObject>("wicket_id", new PropertyModel<myObject>(this,"defaultValue"),myList, new ChoiceRenderer<myObject>("name", "surname"));
Run Code Online (Sandbox Code Playgroud)

但我得到的是一个错误:

No get method defined for class: package$WicketPage expression: defaultValue
Run Code Online (Sandbox Code Playgroud)

拜托,帮帮我吧.

谢谢

jor*_*deu 8

这意味着您需要在要添加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;
    }
}
Run Code Online (Sandbox Code Playgroud)