JSF + HashMap и его ключ - PullRequest
       35

JSF + HashMap и его ключ

1 голос
/ 25 июня 2010

У меня есть база данных с 2 таблицами CD и Song. Сессионный компонент получает доступ к классам сущностей этих двух таблиц. В моем бэк-бине у меня просто есть String cd и HashMap<CDName, CDName> cds, которые будут хранить список возвращенных CD с моего сессионного боба, поэтому в JSF я бы сделал что-то подобное.

<h:selectOneMenu id="cd" value="#{backingBean.cd}">
     <f:selectItem itemLabel="Select CD" itemValue="" />
     <f:selectItems value="#{backingBean.cds}" />
</h:selectOneMenu>

Это успешно загрузит список компакт-дисков в раскрывающийся список, и если я выберу компакт-диск, переменные cd будут содержать имя выбранного компакт-диска. Это прекрасно работает, если CDName уникален. Но, к сожалению, это не так. Итак, я хочу HashMap<ID, CDName> cds, где ID - это PK в таблице CD. Но теперь, как я могу его настроить, поэтому, когда я нажимаю на элемент из выпадающего списка CD, я получаю ID обратно в свой backingbean, так что я могу сделать что-то подобное в моем сессионном компоненте

CD cd = EntityManager.find(CD.class, the id that I get back from JSF page)

по сути, я хочу получить объект cd, на который я просто нажимаю, имейте в виду, что может быть дублирование. Если мой дизайн плохой, пожалуйста, укажите. Помогите, пожалуйста. Заранее спасибо

1 Ответ

2 голосов
/ 25 июня 2010

Это будет установлено в свойстве за #{backingBean.cd}, как показано в вашем примере кода.

Итак, в основном:

CD cd = em.find(CD.class, this.cd);

В качестве альтернативы, вы также можете иметь HashMap<CD, CDName>вместо этого используйте javax.faces.convert.Converter, который в основном делает следующее:

public Object getAsObject(FacesContext context, UIComponent component, String value) {
    return em.find(CD.class, value);
}

public String getAsString(FacesContext context, UIComponent component, Object value) {
    return String.valueOf(((CD) value).getId());
}

См. также:


Тем не менее, HashMap по природе неупорядочено .Вы уверены, что вам не нужно TreeMap (автоматическая сортировка по ключу) или LinkedHashMap (порядок вставки)?

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