Solo <c:forEach>
admite Map
. Cada iteración devuelve una instancia Map.Entry
(como en un bucle Java for
normal).
<c:forEach items="#{yourBean.map}" var="entry">
<li>Key: #{entry.key}, value: #{entry.value}</li>
</c:forEach>
El <h:dataTable>
(y <ui:repeat>
) sólo admite List
(JSF 2.2 vendrá con Collection
apoyo). Puede copiar todas las claves en un List
por separado y luego iterar sobre él en su lugar y luego usar la clave iterada para obtener el valor asociado usando []
en EL.
private Map<String, String> map;
private List<String> keyList;
public void someMethodWhereMapIsCreated() {
map = createItSomeHow();
keyList = new ArrayList<String>(map.keySet());
}
public Map<String, String> getMap(){
return map;
}
public List<String> getKeyList(){
return keyList;
}
<h:dataTable value="#{yourBean.keyList}" var="key">
<h:column>
Key: #{key}
</h:column>
<h:column>
Value: #{yourBean.map[key]}
</h:column>
</h:dataTable>
Tomó nota de que debería ser un HashMap
es por naturaleza desordenada. Si desea mantener el orden de inserción, como en el caso del List
, utilice en su lugar LinkedHashMap
.
Gracias funciona bien ... – Sweety
eres bienvenido :) –
Enmiendas de BalusC fueron clave para mí +1 BalusC – user1156544