Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JSTL在字符串映射和对象列表中迭代列表?_Java_Spring_Jsp_Spring Mvc_Jstl - Fatal编程技术网

Java 如何使用JSTL在字符串映射和对象列表中迭代列表?

Java 如何使用JSTL在字符串映射和对象列表中迭代列表?,java,spring,jsp,spring-mvc,jstl,Java,Spring,Jsp,Spring Mvc,Jstl,我正在从事SpringMVC项目,在该项目中,我需要将一个对象从我的控制器传递到JSP,然后我需要迭代该对象,并在JSP页面的表中显示它们 以下是我的班级,其中包含数据- public class DatacenterMachineMapping { private Map<String, List<MachineMetrics>> datacenterMachines; // getters and setters } public class M

我正在从事SpringMVC项目,在该项目中,我需要将一个对象从我的控制器传递到JSP,然后我需要迭代该对象,并在JSP页面的表中显示它们

以下是我的班级,其中包含数据-

public class DatacenterMachineMapping {

    private Map<String, List<MachineMetrics>> datacenterMachines;

    // getters and setters
}

public class MachineMetrics {

    private String machineName;
    private String t2_95;
    private String t2_99;
    private String syncs;
    private String syncsBehind;
    private String average;

    // getters and setters
}
我曾尝试使用如上所示的JSTL,并尝试在从Controller传递到JSP的映射中迭代
列表
,但不知怎的,它给了我一个异常,如-

'${testing.value}' Property 'value' not found
在对映射中的列表进行迭代后,
Datacenter 1
的表中,我的数据应该如下所示-

Machine Name    T2_95   T2_99   Syncs   Syncs Behind    Average

machineA        100     200     100     1000            10
machineB        200     300     200     2000            20
我在这里做错什么了吗


我正在跟进我的上一个问题。在这个问题中,响应对象是不同的,因为我在这里有字符串和列表的映射。

我认为这应该可以工作

<c:set var="entry" value="${testing.datacenterMachines}"></c:set>
<c:forEachn var="m" items="${entry.value}">
   <tr>
      <td>${m.machineName}</td>
      <td>${m.t2_95}</td>
      <td>${m.t2_99}</td>
      <td>${m.syncs}</td>
      <td>${m.syncsBehind}</td>
      <td>${m.average}</td>
   </tr>
</c:forEach>

${m.machineName}
${m.t2_95}
${m.t2_99}
${m.syncs}
${m.syncsBehind}
${m.average}

看看这个问题——几乎是类似的问题@拉维库马尔:我已经看过了,也试过了,但对我一点用都没有。。我肯定是做错了什么事。。如果可能的话,您能提供帮助吗?这是我在尝试您的建议后得到的错误
属性限定名在元素中必须是唯一的。你知道为什么会这样吗?对不起,这是我的错,应该是我的错,而我也更新了答案。问题是我添加了两次var=“m”属性。一个简单的问题是,为什么要使用
c:set
而不是
c:forEach
?给我一个包含字符串作为键和列表作为值的映射,现在我得到了映射值,它是列表并在其中迭代。我想移除,然后也会这样做。
Machine Name    T2_95   T2_99   Syncs   Syncs Behind    Average

machineA        100     200     100     1000            10
machineB        200     300     200     2000            20
<c:set var="entry" value="${testing.datacenterMachines}"></c:set>
<c:forEachn var="m" items="${entry.value}">
   <tr>
      <td>${m.machineName}</td>
      <td>${m.t2_95}</td>
      <td>${m.t2_99}</td>
      <td>${m.syncs}</td>
      <td>${m.syncsBehind}</td>
      <td>${m.average}</td>
   </tr>
</c:forEach>