JSF 1.2 - Iteration über eine Karte, die enthält Sammlungen

Verwendung von JSF 1.2 und JSP....

Ist es möglich, zum Durchlaufen einer Karte, deren Werte enthalten die Sammlungen?

Ich habe eine Karte, die so aussieht:

Map<String, List<Foo>> myMap;

Möchte ich Durchlaufen myMap und zeichnen Sie eine separate Tabelle für jeden Schlüssel.

Jede Tabelle wird contaim mehrere Zeilen.

Jede Zeile repräsentiert ein Foo-Objekt aus der ArrayList zugeordnet, um die aktuellen Schlüssel.

Leider sind wir mit JSF 1.2 und JSP.

Ich hatte gehofft, ich könnte die Verwendung einer geschachtelten <h:dataTable> tag, aber ich bin nicht mit irgendeinem Erfolg.


Bearbeiten:

Hier ist meine aktuelle JSP-code nach Anhörung BalusC Antwort:

                    <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>

Es bewirkt, dass die folgende Ausnahme:

javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>


Hier ist etwas code aus meinem Managed Bean.

Hinweis, dass ich mit HashMap und ArrayList anstatt die Karte und die Liste

(Ich habe irgendwo gelesen, Sie konnte es nicht verwenden-Schnittstellen, die auch nicht funktionieren)

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());
}

Aufrufen dumpMapInfo vor dem Rendern der Seite wird bestätigt, dass die Karte nicht null und wird aufgefüllt, als erwartet.

InformationsquelleAutor jahroy | 2012-10-02
Schreibe einen Kommentar