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.
I zdobione. Będę publikować za 8 godzin, gdy SO mi pozwoli. – Adam