我试图在Wicket的表单中创建一个简单的下拉选择框,并且被Wicket抛出的异常所困扰。如下:
最后一个原因:没有为类定义get方法:class java.lang.Long expression:id
当我继续检查代码和Wicket文档时,我根本无法弄清楚我做错了什么,并且可以使用Stackoverflow和Wicket社区的有用眼睛。以下是一些相关的代码片段...首先,我的表单使用了CompoundPropertyModel:
add(jobForm);
// Unrelated fields snipped, see 'employmentTypeId':
jobForm.setModel(new CompoundPropertyModel<Job>(jobModel));
jobForm.add(new DropDownChoice("employmentTypeId", new List<GenericPickList>, new ChoiceRenderer<GenericPickList>("description", "id")));
DropDownChoice中的参数解释了:#1,wicket:组件的id,#2,在实际实现中,这是一个完全填充的GenericPickList的List集合(即List),#3,我的ChoiceRenderer,用于标识描述字段作为显示值,id值作为ID,两者都来自GenericPickList类。
GenericPickList类很简单:
public class GenericPickList {
private long id;
private String description;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
错误表明ChoiceRenderer没有在GenericPickList中找到id字段的getter,但它就在那里,所以我被引导相信我的假设是不正确的。任何人都可以对此提出任何见解吗?
作为一个补充说明(以及挫折点),它似乎工作正常,从ChoiceRenderer构造函数中删除了“id”:
new ChoiceRenderer<GenericPickList>("description");
当然,由于这些是与主键相关联的数据驱动值,因此我需要包含ID值。
答案 0 :(得分:2)
当你使用“id”你基本上告诉wicket在你的模型中查找属性id时,它看起来不像jobsTypeId类型具有属性id的模型。