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());
}