Из вашего кода:
<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 несколько раз в течение времени визуализации представления.