JSF 1.2 - итерация по карте, содержащей коллекции

Использование JSF1.2 а такжеJSP....

Можно ли перебрать карту, значения которой содержат коллекции?

У меня есть карта, которая выглядит так:

Map<String, List<Foo>> myMap;

Я хотел бы перебрать myMap и нарисовать отдельную таблицу для каждого ключа.

Каждая таблица будет состоять из нескольких строк.

Каждая строка будет представлять объект Foo из ArrayList, сопоставленного с текущим ключом.

К сожалению, мы используем JSF 1.2 и JSP.

Я надеялся, что смогу использовать вложенный<h:dataTable> тег, но у меня нет успеха.

Edit:

Вот мой текущий код JSP после консультации с ответом BalusC:

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

Вот некоторый код из моего управляемого компонента.

Обратите внимание, что я использую HashMap и ArrayList вместо Map и List

(Я читал где-то, что вы не можете использовать интерфейсы, которые также не работают)

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 перед рендерингом страница подтверждает, что карта не равна нулю и заполнена как положено.

Ответы на вопрос(1)

Ваш ответ на вопрос