wicket DropDownChoice没有为类定义get方法

时间:2011-01-23 00:27:19

标签: wicket

我正在使用DropDownChoice,它的键和值是User对象的username属性。但是当我提交时,我得到以下错误没有为类定义get方法:class java.lang.String expression:username。

提交表单时,我希望将表单输入设置为SearchPerson对象的name属性,我使用users(用户列表)加载下拉列表。我的选择框的显示和值都是用户名

<select name="select" wicket:id="name" id="select">
                    <option value="test">test</option>
                </select>

form.add(new DropDownChoice("name",new PropertyModel(searchPerson, "name"),users,new ChoiceRenderer( "username", "username" )));

2 个答案:

答案 0 :(得分:3)

您正尝试将User注入String属性(searchPerson.name)。将users设为List<Strings>,或使DropDownChoice设为IModel<User>

[编辑]

并且,该错误可能正在发生,因为组件正在尝试获取当前模型值的关键属性。因此,需要searchPerson.name并尝试从中获取属性username的值,这显然不存在,因为它是String,而不是User

<强> [更新]

如果你想要的是自动完成文本字段,你可以尝试从wicket-extensions中DefaultCssAutocompleteTextField。你可以直接查询数据库(Hibernate,我猜)用户名而不是用户,而不是在内存中迭代用户列表。

答案 1 :(得分:0)

PropertyModel是解决此类问题的不错选择。 Topic是一个对象并且有一个字符串名称。我已经在Topic中覆盖toString()方法,并且它正常工作。我建议使用这个方法。

topicDropDown = new DropDownChoice<Topic>("topicOptions", new PropertyModel<Topic>       (this.top, "topicOptions"), new LoadableDetachableModel<List<Topic>>() {
        @Override
        protected List<Topic> load() {
            return top.getAllTopics();

        }