如何从对象列表中获取特定属性?

时间:2010-10-31 02:04:47

标签: java wicket

我有一个数组,其中包含Group个对象的列表。我想将此列表设置为DropDownChoice组件。但是,我想向最终用户显示Group个对象的name属性,然后获取所选值的id属性以添加数据库。怎么办?

private List<Group> groupTypes;
DatabaseApp db = new DatabaseApp();
groupTypes = db.getGroups();
groupDropDownChoice = new DropDownChoice("type", groupTypes);
...
...
addUserForm.add(new Button("submit"){
            @Override
            public void onSubmit(){
                Group group = (Group) groupDropDownChoice.getModelObject(); 
...
...
            db.addUser(group.getId(), den, name, login, email, password1);

DatabaseApp.java

public List<Group> getGroups() throws SQLException{
        List<Group> groups = new ArrayList<Group>();

        try {
            String query = "SELECT * FROM [GROUP]";
            Statement statement = db.createStatement();
            ResultSet result = statement.executeQuery(query);

            while(result.next()){
                int id = result.getInt("ID");
                String name = result.getString("NAME");
                groups.add(new Group(id, name));
            }
            result.close();

        } catch (SQLException ex) {
            throw new SQLException(ex.getMessage());
        }
            return groups;
    }

2 个答案:

答案 0 :(得分:1)

DropDownChoice有另一个构造函数接受IChoiceRenderer的附加参数,该参数允许控制显示的内容以及使用表单发回的内容。

请参阅this example

在您的代码中,实现看起来大致类似于

private List<Group> groupTypes;
DatabaseApp db = new DatabaseApp();
groupTypes = db.getGroups();
groupDropDownChoice = new DropDownChoice("type", groupTypes, new IChoiceRenderer(){
    @Override
    public Object getDisplayValue(Object object) {
        return ((Group) object).getName();
    }

    @Override
    public String getIdValue(Object object, int index) {
        return Integer.toString(index);
    }
});
...
...
addUserForm.add(new Button("submit"){
            @Override
            public void onSubmit(){
                Group group = (Group) groupDropDownChoice.getModelObject(); 
...
...
            db.addUser(group.getId(), den, name, login, email, password1);

答案 1 :(得分:0)

您只是直接从群组列表中创建DropDownChoice。在我看来,你真正想要的是一个群组列表的模型;见IModel documentation。然后,您可以创建一个自定义模型,该模型仅返回组的名称而不是整个Group对象。