首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF + HashMap及其关键技术

JSF + HashMap及其关键技术
EN

Stack Overflow用户
提问于 2010-06-26 02:33:36
回答 1查看 1.9K关注 0票数 1

我有一个数据库与2个表CDSong。会话bean访问,然后访问这两个表的实体类。在我的backing中,我只有一个String cdHashMap<CDName, CDName> cds来保存从会话bean返回的CD列表,所以在JSF中我会这样做。

代码语言:javascript
复制
<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中执行如下操作

代码语言:javascript
复制
CD cd = EntityManager.find(CD.class, the id that I get back from JSF page)

从本质上讲,我希望获得我刚刚单击的cd对象,请记住,可能会有重复。如果我的设计不好,请指出。请帮帮忙。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-26 02:41:08

它将在#{backingBean.cd}后面的属性中设置,如您的代码示例所示。

所以,基本上:

代码语言:javascript
复制
CD cd = em.find(CD.class, this.cd);

或者,您也可以改为使用HashMap<CD, CDName>并使用javax.faces.convert.Converter,它基本上执行以下操作:

代码语言:javascript
复制
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());
}

另请参阅:

  • Objects in h:selectOneMenu.

也就是说,HashMap本质上是无序的。您确定不需要TreeMap (按键自动排序)或LinkedHashMap (插入顺序)吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3120504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档