2011-11-17 29 views
11

Bazı garip çözümlerin tartışıldığı birkaç başka örnek görüyordum ama hiçbiri işe yaramaz ve hepsi JSF 2'den önceki sürümlerde ele alınıyordu. haritanın anahtarları? Ben ui denedim: tekrarlayın ve c: forEach aşağıda gibi hiç şansım:Facelets'te bir harita koleksiyonu çıktılar JSF 2

<c:forEach items="${myBean.myMap.keySet}" var="var"> 
    <h:outputText value="#{var}"/> 
</c:forEach> 
+0

ben bunu anladım. SO bana izin verdiğinde 8 saat içinde yayınlayacağım. – Adam

cevap

14

Kodunuzdaki Gönderen: Bu işe gitmiyor

<c:forEach items="${myBean.myMap.keySet}" var="var"> 

. Bu, the Map interface'da getKeySet() yöntemini gerektirir, ancak yok.

<c:forEach items="#{myBean.myMap.keySet()}" var="key"> 
    <h:outputText value="#{key}"/> 
</c:forEach> 

Veya: Ortamınız EL 2.2 destekliyorsa

(Servlet Tomcat 7, GlassFish 3, vs gibi 3,0 kaplar), o zaman bir özellik olarak bunu aramak yerine direkt keySet() yöntemi çağırmak gerekir ortamınızın henüz EL 2.2 desteklemiyorsa, o zaman da bir getKey() method olan her tekrarında bir Map.Entry instance verir haritası doğrudan kendisi üzerinde yineleme gerektiğini, bu nedenle bu yanı yapmalıdır:

<c:forEach items="#{myBean.myMap}" var="entry"> 
    <h:outputText value="#{entry.key}"/> 
</c:forEach> 

Yukarıdakilerin hiçbiri, Map veya Set desteklemediği için <ui:repeat> ile çalışmamaktadır. List ve yalnızca diziyi destekler. <c:forEach> ve <ui:repeat> arasındaki fark, görüntü oluşturma süresi sırasında <c:forEach>'un birden fazla JSF bileşeni oluşturduğu ve <ui:repeat> görüntü işleme süresi sırasında HTML çıktısını birçok kez üreten tek bir JSF bileşeni oluşturduğu şeklindedir.

+0

Cevabınızı daha iyi seviyorum. Daha fazla detay. Seni hatırlıyorum! Sen bir cevap bağımlısısın. Sen adamı salla! – Adam

+1

Rica ederim. – BalusC

9

Bu çıkış haritası anahtarlarına doğru sözdizimi çıkıyor geçerli:

<ui:repeat value="#{myBean.myMap().keySet().toArray()}" var="var"> 
    <h:outputText value="#{var}"/><br/> 
</ui:repeat>