How to show hashmap values in jsf?

最后都变了- 提交于 2019-12-18 02:47:48

问题


I have bean "MyBean", which has property HashMap - "map" which values type is MyClass. I want to show some properties of map in jsf using ui:repeat. But these code:

<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>

But this code didn't show anything. Though when I try to show hashmap values in jsp this way, it was succesfull. Where I am wrong? And how fix that?


回答1:


From the documentation for the repeat value attribute:

The name of a collection of items that this tag iterates over. The collection may be a List, array, java.sql.ResultSet, or an individual java Object. If the collection is null, this tag does nothing.

So, var is set as your HashMap and EL tries to look up the key "value" on it. You will need to expose your entry set as a List.




回答2:


That's indeed a major pita. The <c:forEach> supported Map for long. Apart from supplying another getter as suggested by McDowell, you could also workaround this by a custom EL function.

<ui:repeat value="#{util:toList(bean.map)}" var="entry">
    #{entry.key} = #{entry.value} <br/>
</ui:repeat>

where the EL function look like this

public static List<Map.Entry<?, ?>> toList(Map<?, ?> map) {
    return = map != null ? new ArrayList<Map.Entry<?,?>>(map.entrySet()) : null;
}

Or, if you're on EL 2.2 already (provided by Servlet 3.0 compatible containers such as Glassfish 3, Tomcat 7, etc), then just use Map#entrySet() and then Set#toArray().

<ui:repeat value="#{bean.map.entrySet().toArray()}" var="entry">
    #{entry.key} = #{entry.value} <br/>
</ui:repeat>


来源:https://stackoverflow.com/questions/6001743/how-to-show-hashmap-values-in-jsf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!