2010-01-26 18 views
6

Xzx1'de yuvalanmış bir harita üzerinde nasıl yineleme yapılır

public class TaskListData { 
    private Map<String, String[]> srcMasks = new HashMap<String, String[]>(); 
    private Map<Integer, Map<String, String[]>> ftqSet = new HashMap<Integer, Map<String, String[]>>(); 

    public void setFTQSet(Integer ftqid, String[] src, String[] masks) { 
     srcMasks.put("srcDir", src); 
     srcMasks.put("masks", masks); 
     ftqSet.put(ftqid, srcMasks); 
    } 
ftqSet ftqSet ftqSet

Benim test JSP dosyasında <c:forEach> kullanarak veriye erişmeye çalışıyorum:

<c:forEach items="#{bean.ftqSet}" var="f"> 
    this text does not print 
    ${f.feedId} 
</c:forEach> 

Ancak ${f.feedId} çıktısı alınmıyor. Bu neden olsun ki? Bu yapının bireysel öğelerine nasıl erişebilirim ki güzel bir masa oluşturabilirim?

cevap

15

bir c:forEach içinde Map her yineleme da getKey() ve getValue() yöntem vardır bir Map.Entry örneği verir. Düz Java'da for (Entry entry : map.entrySet()) yapmasına benzer.

E.g. Bir Map<Integer, Map<String, String[]>>#{entry.value} durumunda

<c:forEach items="#{bean.map}" var="entry"> 
    <h:outputText value="Key: #{entry.key}, Value: #{entry.value}" /><br /> 
</c:forEach> 

bir Map<String, String[]> döndürür, bu nedenle de üzerinde yinelemek gerekiyor:

<c:forEach items="#{bean.map}" var="entry"> 
    <h:outputText value="Key: #{entry.key}, Values:" /> 
    <c:forEach items="#{entry.value}" var="nestedentry"> 
     <h:outputText value="Nested Key: #{nestedentry.key}, Nested Value: #{nestedentry.value}" /> 
    </c:forEach><br /> 
</c:forEach> 

Ama senin

, #{nestedentry.value} aslında String[], bu yüzden gerek tekrar tekrarlatacak:

<c:forEach items="#{bean.map}" var="entry"> 
    <h:outputText value="Key: #{entry.key}, Values:" /> 
    <c:forEach items="#{entry.value}" var="nestedentry"> 
     <h:outputText value="Nested Key: #{nestedentry.key}, Nested Values: " /> 
     <c:forEach items="#{nestedentry.value}" var="nestednestedentry"> 
      <h:outputText value="#{nestednestedentry}" /> 
     </c:forEach><br /> 
    </c:forEach><br /> 
</c:forEach> 

arada, bu aynı zamanda rich:dataList çalışmak gerektiğini .

+0

BalusC, bu yararlı bir teşekkür kanıtlayacaktır. – volvox