一尘不染

如何在中的嵌套地图上进行迭代

jsp

我有一个Map如下所示的bean:

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适合以下数据结构:

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}。为什么会这样呢?我将如何访问该结构的各个元素,以便创建一个漂亮的表?


阅读 237

收藏
2020-06-08

共1个答案

一尘不染

的每次迭代Mapc:forEach给出了一个Map.Entry实例,它反过来又getKey()getValue()方法。这与for (Entry entry : map.entrySet())在普通Java中进行操作类似。

例如

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

在的情况下Map<Integer, Map<String, String[]>>#{entry.value}回报Map<String, String[]>,所以你需要遍历它还有:

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

但是在您的情况下,#{nestedentry.value}实际上是a String[],因此我们需要再次对其进行迭代:

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

顺便说一句,这也应该起作用rich:dataList

2020-06-08