0

我正在尝试使用 Wicket 在表单中创建一个简单的下拉选择框,但被 Wicket 抛出的异常所困扰。如下:

最后一个原因:没有为类定义get方法:类java.lang.Long表达式: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 值。

4

1 回答 1

2

当您使用“id”时,您实际上是在告诉检票口在您的模型中查找属性 id,并且它看起来不像任何就业类型 ID 类型的模型都具有属性 id。

Wicket 选择渲染器文档

于 2013-02-08T20:36:53.463 回答