2011-06-03 18 views

Respuesta

26

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.

+0

Gracias funciona bien ... – Sweety

+0

eres bienvenido :) –

+2

Enmiendas de BalusC fueron clave para mí +1 BalusC – user1156544

Cuestiones relacionadas