Jsf 2 在primefaces数据表中显示键和值映射

Jsf 2 在primefaces数据表中显示键和值映射,jsf-2,primefaces,map,Jsf 2,Primefaces,Map,在我的JavaEE6/JSF2项目中,我在员工实体中有一个映射属性优点: @ElementCollection private Map<String, Float> advantages; @ElementCollection 私人地图优势; 键表示优势名称,值表示与优势名称关联的成本。这被映射到一个包含三列的表中,Employee\u Id、Advantages和Advantages\u Key。我需要在我的中显示所有地图条目,其中显示一个列表。如何实现这一点?如果您的环境支持

在我的JavaEE6/JSF2项目中,我在
员工
实体中有一个
映射
属性
优点

@ElementCollection
private Map<String, Float> advantages;
@ElementCollection
私人地图优势;

键表示优势名称,值表示与优势名称关联的成本。这被映射到一个包含三列的表中,
Employee\u Id
Advantages
Advantages\u Key
。我需要在我的
中显示所有地图条目,其中显示一个
列表
。如何实现这一点?

如果您的环境支持EL 2.2(Java EE 6支持),并且下面示例中的
{employee}
来自
,那么这应该可以实现

<ui:repeat value="#{employee.advantages.entrySet().toArray()}" var="entry">
    Name: #{entry.key}, Cost: #{entry.value}
</ui:repeat>

名称:#{entry.key},成本:#{entry.value}

我知道这个答案太晚了,但也许对其他人来说会有用

假设您的haspmap定义如下:

HashMap<String, BigDecimal> myHashMap;

public List<Entry<String, BigDecimal>> getMyHashMapEntryList() {
return new ArrayList(myHashMap.entrySet());
}
HashMap-myHashMap;
公共列表getMyHashMapEntryList(){
返回新的ArrayList(myHashMap.entrySet());
}
在用户界面中:

<p:dataTable value="#{yourBean.myHashMapEntryList}" var="myEntry">
    in here reference as: #{myEntry.key} #{myEntry.value}
</p:dataTable>

在这里引用为:#{myEntry.key}#{myEntry.value}

这对我很有用,这是我在bean map中的地图:

<p:dataTable id="dtbAddedRoles" value="#{controllerUserCreationMain.mapUtil.entrySet().toArray()}"
                                var="roleAdded">
                                <p:column headerText="Role">
                                    <p:outputLabel value="#{roleAdded.key.roleName}" />
                                </p:column>
                            </p:dataTable>


您使用的是EL 2.2吗?直接迭代
集合
。@XtremeBiker感谢您的回答。情况不一样。我使用了一个数据表来显示所有员工的详细信息(姓名、电话、薪水等),并且我每行指定两列来显示AdvantageName(地图的Kye)和与每个emlpoyee相关的他的成本(值)。我认为他的意思是“获取”。getter方法在
的每一轮迭代中都会被调用。
ArrayList
构造函数本身也会迭代传入集合的每个项。换句话说,这段代码的效率非常低。如果您关心效率,可以很容易地使方法返回单个实例。这里只是一个例子,我也不需要
.toArray()
(Primefaces 6.1)。