JSF+;HashMap及其密钥

JSF+;HashMap及其密钥,jsf,jakarta-ee,key,hashmap,session-bean,Jsf,Jakarta Ee,Key,Hashmap,Session Bean,我有一个包含两个表的数据库CD和Song。然后,会话bean访问这两个表的实体类。在我的backingbean中,我只有一个stringcd和HashMap cd,它将保存从sessionbean返回的cd列表,因此在JSF中,我会这样做 <h:selectOneMenu id="cd" value="#{backingBean.cd}"> <f:selectItem itemLabel="Select CD" itemValue="" /> <

我有一个包含两个表的数据库
CD
Song
。然后,会话bean访问这两个表的实体类。在我的backingbean中,我只有一个
stringcd
HashMap cd
,它将保存从sessionbean返回的cd列表,因此在JSF中,我会这样做

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

基本上,我想获得我只需单击的
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
(插入顺序)?

在你的
背景映射中,你能不能不直接将
Map
返回到JSF,或者你必须像以前那样将其转换成
列表
,应交换键值对以使其显示为所需。即
地图
Map
键将成为选项值,
Map
值将成为选项标签。
EntityManager
不应该是小写吗?:)是,它应该是一个变量:)
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());
}