Как выполнить итерации по вложенной карте в <c:forEach>

У меня есть a Map в бобе следующим образом:

public class TaskListData {
    private Map<String, String[]> srcMasks = new HashMap<String, String[]>();
    private Map<Integer, Map<String, String[]>> ftqSet = new HashMap<Integer, Map<String, String[]>>();

    public void setFTQSet(Integer ftqid, String[] src, String[] masks) {  
        srcMasks.put("srcDir", src);
        srcMasks.put("masks", masks);
        ftqSet.put(ftqid, srcMasks);
    }

Это ftqSet вписывается ниже datastructure:

feedId = "5",
feedName = "myFeedName",
ftqSet => {
            1 => {
                    srcDirs = ["/path/string"],
                    masks = ["p.txt", "q.csv"]
                 }
            2 => { ...
                 }
          }, ...

В моем тесте файл JSP я пытался получить доступ к использованию данных <c:forEach>:

<c:forEach items="#{bean.ftqSet}" var="f">
    this text does not print
    ${f.feedId}
</c:forEach>

Но это не производит ${f.feedId}. Почему это было бы? Как я получил бы доступ к отдельным элементам этой структуры, таким образом, я могу составить хорошую таблицу?

8
задан BalusC 20 December 2015 в 10:24
поделиться

1 ответ

Каждая итерация карта в C: foreach дает , дает экземпляр map.centry , который, в свою очередь, имеет GETHKEY () и GetValue () Методы. Это похоже на выполнение для (запись входа: map.entryset ()) в простых java.

E.G.

<c:forEach items="#{bean.map}" var="entry">
    <h:outputText value="Key: #{entry.key}, Value: #{entry.value}" /><br />
</c:forEach>

В случае карта > # {intrue.value} Возвращает карту , так что вам нужно и повторить его:

<c:forEach items="#{bean.map}" var="entry">
    <h:outputText value="Key: #{entry.key}, Values:" />
    <c:forEach items="#{entry.value}" var="nestedentry">
        <h:outputText value="Nested Key: #{nestedentry.key}, Nested Value: #{nestedentry.value}" />
    </c:forEach><br />
</c:forEach>

, но в вашем случае # {NestedEndry.value} на самом деле является строкой [] , Поэтому нам нужно повторить его снова:

<c:forEach items="#{bean.map}" var="entry">
    <h:outputText value="Key: #{entry.key}, Values:" />
    <c:forEach items="#{entry.value}" var="nestedentry">
        <h:outputText value="Nested Key: #{nestedentry.key}, Nested Values: " />
        <c:forEach items="#{nestedentry.value}" var="nestednestedentry">
            <h:outputText value="#{nestednestedentry}" />
        </c:forEach><br />
    </c:forEach><br />
</c:forEach>

кстати, это должно работать с , богатым: DataList .

17
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: