Показать ключ и значение записей HashMap на странице JSF - PullRequest
16 голосов
/ 03 июня 2011

Я хотел бы отобразить HashMap ключи и соответствующее значение в пользовательском интерфейсе JSF.

Как этого добиться?Как я могу перебрать HashMap на странице JSF, используя некоторый компонент итератора, такой как <h:datatable>?

Ответы [ 2 ]

34 голосов
/ 03 июня 2011

Только <c:forEach> поддерживает Map. Каждая итерация возвращает экземпляр Map.Entry (как в обычном цикле Java for).

<c:forEach items="#{yourBean.map}" var="entry">
    <li>Key: #{entry.key}, value: #{entry.value}</li>
</c:forEach>

<h:dataTable><ui:repeat>) поддерживает только List (JSF 2.2 будет поставляться с поддержкой Collection). Вы можете скопировать все ключи в отдельный List и затем выполнить итерацию по нему, а затем использовать повторяющийся ключ для получения соответствующего значения, используя [] в EL.

private Map<String, String> map;
private List<String> keyList;

public void someMethodWhereMapIsCreated() {
    map = createItSomeHow();
    keyList = new ArrayList<String>(map.keySet());
}

public Map<String, String> getMap(){
     return map;
}

public List<String> getKeyList(){
     return keyList;
}
<h:dataTable value="#{yourBean.keyList}" var="key"> 
    <h:column> 
        Key: #{key}
    </h:column> 
    <h:column> 
        Value: #{yourBean.map[key]}
    </h:column> 
</h:dataTable>

Следует отметить, что HashMap по природе неупорядочен. Если вы хотите сохранить порядок вставки, например, с List, вместо этого используйте LinkedHashMap.

0 голосов
/ 20 июня 2019

С <ui:repeat> ( JSF 2.2 и далее ):

<ui:repeat var="entry" value="#{map.entrySet().toArray()}">
            key:#{entry.key}, Id: #{entry.value.id}
</ui:repeat>

Источник: https://gist.github.com/zhangsida/9206849

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...