使用Wicket 7,我创建了一个DropDownChoice组件,该组件使用从数据库条目派生的模型。

Class Task包含两个字段,即id和taskname。查询时,我的数据库接口返回一个Task对象列表。由此,我创建了一个模型类,如下所示:

public class TaskModel extends LoadableDetachableModel{
    @Override
    protected Object load() {
        try{
            TaskCriteria taskCriteria = new TaskCriteria();
            taskCriteria.listTask();
            return Arrays.asList(Task.listTaskByCriteria(taskCriteria));
        } catch (PersistentException pe){
            pe.printStackTrace();
        }
        return null;
    }
}


然后,我将Panel细分为要在以后的页面中使用,将DropDownChoice括起来。

public class TaskDropDownPanel extends Panel{
    public TaskDropDownPanel(String id) {
        super(id);
        Form form = new Form("form");

        form.add(new DropDownChoice<Task>("tasks", new Model(null), new TaskModel()));
        add(form);
    }
}


大多数事情似乎都可以正常工作,但是我从DropDownChoice获得的输出没有显示我想要的字段。在这种情况下,虽然我不确定,但是它只打印1、2、3、4,我相信这是数据库中任务的ID。

<select wicket:id="tasks" name="tasks">
    <option selected="selected" value="">Choose One</option>
    <option value="0">1</option>
    <option value="1">2</option>
    <option value="2">3</option>
    <option value="3">4</option>
</select>


我应该在DropDownChoice中使用其他派生模型吗(例如PropertyModel)?最终,我希望Task对象中的taskname是下拉菜单上显示的文本。

最佳答案

您需要使用IChoiceRenderer。将渲染器传递到您的DropDownChoice。查阅Wicket指南中11.4节的底部。 https://ci.apache.org/projects/wicket/guide/7.x/guide/modelsforms.html#modelsforms_4

像这样:

ChoiceRenderer taskRenderer = new ChoiceRenderer("taskname", "id");

08-06 12:49