Как получить определенный атрибут из списка объектов? - PullRequest
0 голосов
/ 31 октября 2010

У меня есть массив, содержащий список Group объектов. Я хочу установить этот список для компонента DropDownChoice. Однако я хочу показать конечному пользователю только атрибут имени Group объектов, а затем получить атрибут идентификатора выбранных значений для добавления базы данных. Что делать?

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 ]

1 голос
/ 31 октября 2010

DropDownChoice имеет другой конструктор, принимающий дополнительный параметр IChoiceRenderer, который позволяет контролировать то, что отображается и что отправляется обратно с помощью формы.

См. этот пример .

В вашем коде реализация может выглядеть примерно так:

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);
0 голосов
/ 31 октября 2010

Вы просто создаете DropDownChoice прямо из списка групп.Мне кажется, что вы действительно хотите модель списка групп;см. IModel документацию .Затем вы можете создать собственную модель, которая возвращает только имя группы вместо всего объекта Group.

...