我正在使用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" )));
答案 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();
}