Ответ 1
Из вашего кода:
<c:forEach items="${myBean.myMap.keySet}" var="var">
Это не сработает. Для этого требуется getKeySet()
метод интерфейс Map
, но его нет.
Если ваша среда поддерживает EL 2.2 (контейнеры Servlet 3.0, такие как Tomcat 7, Glassfish 3 и т.д.), вы должны вызывать метод keySet()
напрямую, а не называть его как свойство:
<c:forEach items="#{myBean.myMap.keySet()}" var="key">
<h:outputText value="#{key}"/>
</c:forEach>
Или, если ваша среда еще не поддерживает EL 2.2, вы должны непосредственно перебирать непосредственно карту, которая дает Map.Entry
экземпляр на каждой итерации, которая, в свою очередь, имеет getKey()
метод, поэтому это также должно быть сделано:
<c:forEach items="#{myBean.myMap}" var="entry">
<h:outputText value="#{entry.key}"/>
</c:forEach>
Ни одно из выше не работает с <ui:repeat>
, поскольку оно не поддерживает Map
и Set
. Он поддерживает только List
и массив. Разница между <c:forEach>
и <ui:repeat>
заключается в том, что <c:forEach>
генерирует несколько компонентов JSF во время времени сборки и что <ui:repeat>
создает один компонент JSF, который несколько раз генерирует свой вывод HTML во время просмотра рендеринга.