2011-11-17 11 views
11

Widziałem kilka innych przykładów na temat omawiania niektórych dziwnych obejść, ale żaden nie wydaje się działać i wszystkie były adresowane w wersjach wcześniejszych niż JSF 2. Tak więc, można po prostu wypisać klucze mapy? Próbowałem ui: repeat i c: foreach jak poniżej bez powodzenia:Wyprowadzam kolekcję map w facelkach JSF 2

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

I zdobione. Będę publikować za 8 godzin, gdy SO mi pozwoli. – Adam

Odpowiedz

14

ze swojego kodu:

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

To nie zadziała. Wymaga to metody getKeySet() na the Map interface, ale jej nie ma.

Jeśli środowisko obsługuje EL 2.2 (Servlet 3.0 pojemniki takie jak Tomcat 7, GlassFish 3, etc), a następnie należy wywołać metodę keySet()bezpośrednio zamiast nazywając ją jako własność:

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

Or jeśli środowisko nie obsługuje jeszcze EL 2.2, to należy iteracyjne nad mapą samej bezpośrednio co daje Map.Entry instance na każdej iteracji, które z kolei ma getKey() method, więc powinno to zrobić także:

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

Żadne z powyższych nie działa z <ui:repeat>, ponieważ nie obsługuje Map ani Set. Obsługuje tylko List i tablicę. Różnica między wartościami <c:forEach> i <ui:repeat> polega na tym, że <c:forEach> generuje wiele komponentów JSF podczas budowania widoku i że <ui:repeat> tworzy pojedynczy komponent JSF, który generuje dane wyjściowe HTML wiele razy podczas renderowania widoku.

+0

Podoba mi się twoja odpowiedź lepiej. Więcej szczegółów. Pamiętam cię! Jesteś narkomanem. Jesteś człowiekiem! – Adam

+1

Nie ma za co. – BalusC

9

Okazuje się poprawnej składni do kluczy wyjście map jest:

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