Как показать элементы коллекции как элементы в selectManyListbox? - PullRequest
1 голос
/ 11 января 2010

У меня есть боб:

public ProjectServiceImpl {    
   public List<Project> getAllProjects () { ... }
}

Я хочу перечислить все эти проекты как элементы в <h:selectManyListbox>. Когда пользователь выбирает один или несколько элементов и нажимает кнопку «Отправить», выбранные элементы должны быть преобразованы в проекты.

Я немного озадачен тем, как составлять списки элементов и как должен выглядеть конвертер корреспондентов?

Ответы [ 2 ]

2 голосов
/ 11 января 2010

Вам необходимо реализовать Converter#getAsString(), чтобы требуемый Java-объект был представлен в уникальном строковом представлении, которое можно использовать в качестве параметра HTTP-запроса. Использование технического идентификатора базы данных (первичный ключ) очень полезно здесь.

public String getAsString(FacesContext context, UIComponent component, Object value) {
    // Convert the Project object to its unique String representation.
    return String.valueOf(((Project) value).getId());
}

Затем вам нужно реализовать Converter#getAsObject(), чтобы параметр HTTP-запроса (согласно определению String) можно было преобразовать обратно в нужный объект Java (Project в вашем случае) ` .

public Object getAsObject(FacesContext context, UIComponent component, String value) {
    // Convert the unique String representation of Project to the actual Project object.
    return projectDAO.find(Long.valueOf(value));
}

Наконец, просто свяжите этот конвертер с рассматриваемым типом объекта, JSF позаботится о преобразовании, когда Project входит в изображение, не нужно указывать converterId или f:converter:

<converter>
    <converter-for-class>com.example.Project</converter-for-class>
    <converter-class>com.example.ProjectConverter</converter-class>
</converter>

Таким образом, вы можете просто создать SelectItem с Project в качестве значения.

Вы можете получить некоторую справочную информацию и больше идей из этой статьи блога: http://balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html

1 голос
/ 11 января 2010

Чтобы перечислить элементы в <h:selectManyListbox>, вам нужно использовать <f:selectItems> и указать значение в списке SelectItem объектов.

Обычно я подхожу к этому циклу, просматривая проекты и конвертируя каждый проект в SelectItem. В то же время я также храню проекты в формате HashMap, используя значение SelectItem в качестве ключа. Затем, когда вам нужно получить список объектов проекта, вы можете просмотреть выбранные значения и получить объекты с карты.

Если вы не хотите создавать HashMap, вы можете использовать положение Project в Списке в качестве значения SelectItem и искать проекты таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...