我有一个数据库与2个表CD和Song。会话bean访问,然后访问这两个表的实体类。在我的backing中,我只有一个String cd和HashMap<CDName, CDName> cds来保存从会话bean返回的CD列表,所以在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是表CD中的PK。但现在我如何设置它,这样当我单击CD下拉列表中的一个项目时,我就会在backingbean中得到ID,这样我就可以在我的会话bean中执行如下操作
CD cd = EntityManager.find(CD.class, the id that I get back from JSF page)从本质上讲,我希望获得我刚刚单击的cd对象,请记住,可能会有重复。如果我的设计不好,请指出。请帮帮忙。提前感谢
发布于 2010-06-26 02:41:08
它将在#{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());
}另请参阅:
h:selectOneMenu.也就是说,HashMap本质上是无序的。您确定不需要TreeMap (按键自动排序)或LinkedHashMap (插入顺序)吗?
https://stackoverflow.com/questions/3120504
复制相似问题