JSF 1.2 - itérer sur une Carte qui contient des Collections

Utilisant JSF 1.2 et JSP....

Est-il possible d'itérer sur une Carte dont les valeurs contiennent des Collections?

J'ai une Carte qui ressemble à ceci:

Map<String, List<Foo>> myMap;

Je voudrais effectuer une itération sur myMap et dessiner un tableau distinct pour chaque clé.

Chaque table contaim plusieurs lignes.

Chaque ligne représentera un objet Foo à partir de la liste de tableaux mappé à la clé en cours.

Malheureusement, nous sommes en utilisant JSF 1.2 et JSP.

J'espérais que je pourrais utiliser un imbriquée <h:dataTable> tag, mais je ne suis pas avoir une chance de réussir.


Modifier:

Voici mon code JSP, après consultation BalusC réponse:

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

Il provoque l'exception suivante:

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


Voici le code de mon Managed Bean.

Remarque que je suis en utilisant HashMap et liste de tableaux au lieu de la Carte et la Liste

(J'ai lu quelque part, vous ne pouviez pas utiliser les interfaces, ce qui ne fonctionne pas)

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

Appel dumpMapInfo avant le rendu de la page confirme que la Carte n'est pas nulle et est définie comme prévu.

Désolé, incontournable de la JSF 1.2 de la partie. Cela peut être utile: stackoverflow.com/a/8552872/880619
Malheureusement, nous sommes à l'aide de JSP (pas Facelets).

OriginalL'auteur jahroy | 2012-10-02