У меня есть база данных с 2 таблицами CD
и Song
. Бобовый доступ сессии затем классы объекта тех двух таблиц. В моем бобе поддержки у меня просто есть a String cd
и HashMap<CDName, CDName> cds
это сдержит список возврата CD из моего sessionbean, таким образом, в JSF я сделал бы что-то вроде этого.
<h:selectOneMenu id="cd" value="#{backingBean.cd}">
<f:selectItem itemLabel="Select CD" itemValue="" />
<f:selectItems value="#{backingBean.cds}" />
</h:selectOneMenu>
Это успешно загружает список CD на выпадающий список, и если я выбираю CD, cd
переменные содержали бы название 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
возразите, что я просто нажимаю, имею в виду его, могло бы быть дублирование. Если мой дизайн плох, укажите. Справка.Заранее спасибо
Он будет установлен в свойстве за # {backingBean.cd}
, как показано в вашем примере кода.
Итак, в основном:
CD cd = em.find(CD.class, this.cd);
В качестве альтернативы вы также можете иметь HashMap
и использовать вместо него 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
(порядок вставки)?