一個地圖使用JSF 1.2和JSP ....JSF 1.2 - 遍歷包含集合
是否可以遍歷一個Map,它的值包含集合?
我有一個地圖,看起來像這樣:
Map<String, List<Foo>> myMap;
我想遍歷MYMAP並繪製一個單獨的表中的每個關鍵。
每個表將包含多行。
每一行代表映射到當前鍵的ArrayList中的Foo對象。
很遺憾,我們正在使用JSF 1.2和JSP。
我希望我可以使用一個嵌套的<h:dataTable>
標籤,但我沒有任何成功。
編輯:
這裏是諮詢BalusC的回答後,我當前的JSP代碼:
<c:forEach items="#{someModule$someBean.prefMap}" var="mapEntry">
<br/><br/><p>Key: <h:outputText value="#{mapEntry.key}"/></p>
<h:dataTable value="#{mapEntry.value}" var="pref">
<h:column><h:outputText value="#{pref.defaultFieldLabel}"/></h:column>
<h:column><h:outputText value="#{pref.fieldLabel}"/></h:column>
</h:dataTable>
</c:forEach>
它會導致以下異常:
javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
這裏是我的Managed Bean的一些代碼。
請注意,我使用的HashMap和ArrayList,而不是地圖和列表
(我讀的地方你不能使用接口,這也不起作用)之前
private HashMap<String, ArrayList<Foo>> prefMap;
public HashMap<String, ArrayList<Foo>> getPrefMap()
{
if (prefMap == null)
{
buildPrefMap();
}
return prefMap;
}
private void buildPrefMap()
{
prefMap = new HashMap<String, ArrayList<Foo>>();
for (Foo mdp : getFooArray())
{
String cat = mdp.getField().getCategory();
if (! prefMap.containsKey(cat))
{
ArrayList<Foo> mpl = new ArrayList<Foo>();
mpl.add(mdp);
prefMap.put(cat, mpl);
}
else
{
prefMap.get(cat).add(mdp);
}
}
}
private void dumpMapInfo()
{
StringBuilder sb = new StringBuilder();
Map<String, ArrayList<Foo>> theMap = getPrefMap();
for (String key : theMap.keySet())
{
sb.append(key + ": " + theMap.get(key).size());
}
System.out.println("\n\n" + sb.toString());
}
調用dumpMapInfo
渲染頁面確認Map不爲空並按預期填充。
對不起,錯過了JSF 1.2的一部分。這可能會有所幫助:http://stackoverflow.com/a/8552872/880619 –
不幸的是,我們使用的是JSP(而不是Facelets)。 – jahroy