Вывести коллекцию карт в Facelets JSF 2 - PullRequest
12 голосов
/ 17 ноября 2011

Я видел пару других примеров, когда SO обсуждали некоторые странные обходные пути, но, похоже, ни один из них не работал, и все они были адресованы в версиях, предшествующих JSF 2. Итак, возможно ли просто вывести ключи карты? Я пробовал ui: repeat и c: forEach, как показано ниже, без удачи:

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

Ответы [ 2 ]

17 голосов
/ 17 ноября 2011

Из вашего кода:

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

10 голосов
/ 18 ноября 2011

Получается правильный синтаксис для вывода ключей карты:

<ui:repeat value="#{myBean.myMap().keySet().toArray()}" var="var">
   <h:outputText value="#{var}"/><br/>
</ui:repeat>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...