Korzystanie JSF 1,2 i JSP ....JSF 1.2 - iteracyjne nad mapą, która zawiera Kolekcje
Czy jest możliwe iteracyjne nad mapą, którego wartości zawierają kolekcje?
Mam mapę, która wygląda tak:
Map<String, List<Foo>> myMap;
Chciałbym iteracyjne nad MyMap i wyciągnąć osobną tabelę dla każdego klawisza.
Każda tabela zawiera kilka wierszy.
Każdy wiersz będzie reprezentował obiekt Foo z tablicy ArrayList zamapowanej na bieżący klucz.
Niestety używamy JSF 1.2 i JSP.
Miałem nadzieję, że mogę użyć znacznika zagnieżdżonego <h:dataTable>
, ale nie mam żadnego sukcesu.
Edit:
Tu jest mój bieżący kod JSP po konsultacji BalusC za odpowiedź:
<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>
To powoduje, że następujący wyjątek:
javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
Oto kod z mojej fasoli zarządzanej.
Zauważ, że używam HashMap i ArrayList zamiast Mapa i listy
(Czytałem gdzieś, że nie może użyć interfejsów, które również nie działa)
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());
}
Wywołanie dumpMapInfo
przed renderowanie strony potwierdza, że mapa nie jest pusta i jest zapełniana zgodnie z oczekiwaniami.
Przepraszamy, brakowało części JSF 1.2. To może być pomocne: http://stackoverflow.com/a/8552872/880619 –
Niestety używamy JSP (nie Facelets). – jahroy