如何使用ChoiceRenderer在Wicket中最佳地使用DropDownChoice来处理显示和ID值?

时间:2013-02-08 20:20:41

标签: java wicket

我试图在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值。

1 个答案:

答案 0 :(得分:2)

当你使用“id”你基本上告诉wicket在你的模型中查找属性id时,它看起来不像jobsTypeId类型具有属性id的模型。

Wicket Choice Renderer Documentation