2011-06-03 23 views

cevap

26

Yalnızca <c:forEach>, Map desteklerini destekler. Her yineleme, bir Map.Entry örneği geri verir (normal bir Java for döngüsünde olduğu gibi).

<c:forEach items="#{yourBean.map}" var="entry"> 
    <li>Key: #{entry.key}, value: #{entry.value}</li> 
</c:forEach> 

<h:dataTable> (ve <ui:repeat>) sadece List destekler (JSF 2.2 Collection desteği ile gelecek). Tüm anahtarları ayrı bir List kopyalayıp bunun yerine yineleyin ve sonra yinelenen anahtarı kullanarak EL'de [] kullanarak ilişkili değeri elde edin.

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> 

bir HashMap sırasız doğası gereği olduğunu olmalıdır kaydetti. Ekleme siparişini korumak istiyorsanız, List ile olduğu gibi, bunun yerine LinkedHashMap kullanın.

+0

Teşekkürler iyi çalışıyor ... – Sweety

+0

hoşgeldiniz :) –

+2

BalusC tarafından yapılan değişiklikler benim için önemliydi +1 BalusC – user1156544