Java 如何在jsf中显示hashmap值?

Java 如何在jsf中显示hashmap值?,java,jsf,hashmap,uirepeat,Java,Jsf,Hashmap,Uirepeat,我有一个bean“MyBean”,它有属性HashMap——“map”,它的值类型是MyClass。我想使用ui:repeat在jsf中显示map的一些属性。 但这些代码: <ui:repeat var="var" value="#{mybean.map}" > <tr> <td> <h:outputText value="#{var.value.property1}"></h:outputText> </td> &l

我有一个bean“MyBean”,它有属性HashMap——“map”,它的值类型是MyClass。我想使用ui:repeat在jsf中显示map的一些属性。 但这些代码:

<ui:repeat  var="var"  value="#{mybean.map}" >
<tr> 
<td> <h:outputText value="#{var.value.property1}"></h:outputText> </td>
<td><h:outputText value="#{var.value.property2}"></h:outputText></td>
</tr>
</ui:repeat>

但是这个代码没有显示任何内容。虽然当我尝试以这种方式在jsp中显示hashmap值时,它是成功的。我错在哪里?如何解决此问题?

对于
repeat
value属性:

此标记迭代的项集合的名称。集合可以是
列表
、数组、
java.sql.ResultSet
,也可以是单个java
对象
。如果集合为null,则此标记不执行任何操作


因此,var被设置为您的
HashMap
,EL尝试在其上查找键
“value”
。您需要将条目集公开为一个
列表

,这确实是一个主要的pita。
长期支持
Map
。除了按照McDowell的建议提供另一个getter之外,您还可以通过一个新的方法来解决这个问题


#{entry.key}=#{entry.value}
EL函数是这样的

公共静态列表>(map.entrySet()):null;
}

或者,如果您已经在EL2.2上(由与Servlet 3.0兼容的容器提供,如Glassfish 3、Tomcat 7等),那么只需使用
Map#entrySet()
,然后使用
Set#toArray()


#{entry.key}=#{entry.value}

(@Aram:您需要在普通文本和代码块之间放置一条空行,否则格式不正确)@Mat:好的,谢谢。我不知道。@Aram Gevorgyan-like
dataTable
repeat
是一个基于索引的组件(请参见偏移量和大小属性)。Adam Winer(他是JSF专家组的成员)在这里讨论了一个类似的案例:“
{util:toList(bean.map)}
”,您的语法是
util
托管bean,BalusC?我以前从未见过这种语法。@Thang:这是一个EL函数:它类似于JSTL函数。在
命名空间中也有一些,请参见
的:mapToList()