Ответ 1
Каждая итерация Map
в c:forEach
дает экземпляр Map.Entry
, который, в свою очередь, имеет getKey()
и getValue()
. Это похоже на выполнение for (Entry entry : map.entrySet())
в простой Java.
например.
<c:forEach items="#{bean.map}" var="entry">
<h:outputText value="Key: #{entry.key}, Value: #{entry.value}" /><br />
</c:forEach>
В случае Map<Integer, Map<String, String[]>>
#{entry.value}
возвращает a Map<String, String[]>
, поэтому вам нужно также перебирать его:
<c:forEach items="#{bean.map}" var="entry">
<h:outputText value="Key: #{entry.key}, Values:" />
<c:forEach items="#{entry.value}" var="nestedentry">
<h:outputText value="Nested Key: #{nestedentry.key}, Nested Value: #{nestedentry.value}" />
</c:forEach><br />
</c:forEach>
Но в вашем случае #{nestedentry.value}
на самом деле является String[]
, поэтому нам нужно повторить его снова:
<c:forEach items="#{bean.map}" var="entry">
<h:outputText value="Key: #{entry.key}, Values:" />
<c:forEach items="#{entry.value}" var="nestedentry">
<h:outputText value="Nested Key: #{nestedentry.key}, Nested Values: " />
<c:forEach items="#{nestedentry.value}" var="nestednestedentry">
<h:outputText value="#{nestednestedentry}" />
</c:forEach><br />
</c:forEach><br />
</c:forEach>
Кстати, это должно работать и с rich:dataList
.