Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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,我有一个字符串映射和对象列表,其中包含每个数据中心及其机器。我目前正在从我的控制器将这个对象传递给JSP,然后在JSP页面中迭代它以显示数据 如果映射大小为1,那么我就能够在JSP页面中显示数据,并且工作正常 现在假设映射大小为2,那么我想显示两个表,映射中每个键对应一个表。这是我无法做到的。对于我的用例,映射的最大大小可以是3 以下是我的班级,其中包含数据- public class DatacenterMachineMapping { private Map<String,

我有一个字符串映射和对象列表,其中包含每个数据中心及其机器。我目前正在从我的控制器将这个对象传递给JSP,然后在JSP页面中迭代它以显示数据

如果映射大小为1,那么我就能够在JSP页面中显示数据,并且工作正常

现在假设映射大小为2,那么我想显示两个表,映射中每个键对应一个表。这是我无法做到的。对于我的用例,映射的最大大小可以是3

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

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
}
下面是我的JSP页面,它只在地图大小等于1时工作良好。。我不知道如何在JSP页面中以这种方式迭代上述
映射
对象,以便为我的上述用例显示两个表,每个键一个表,如上所示。这可能吗

<body>
    <table>
        <thead>
            <tr>
                <th>Machine Name</th>
                <th>T2_95</th>
                <th>T2_99</th>
                <th>Syncs</th>
                <th>Syncs Behind</th>
                <th>Average</th>
            </tr>
        </thead>
        <tbody>

        <c:set var="entry" value="${testing.datacenterMachines}"></c:set>
        <c:forEach 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>

        </tbody>
    </table>
</body>
试试这个-

<c:forEach var="e" items="${entry}">
  <h3>For <c:out value="${e.key}"/></h3>
    <table>
      <thead>
            <tr>
                <th>Machine Name</th>
                <th>T2_95</th>
                <th>T2_99</th>
                <th>Syncs</th>
                <th>Syncs Behind</th>
                <th>Average</th>
            </tr>
        </thead>
        <tbody>
          <c:forEach var="m" items="${e.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>
        </tbody>
    </table>
</c:forEach>


对于
机器名
T2_95
T2_99
同步
在后面同步
平均值
${m.machineName}
${m.t2_95}
${m.t2_99}
${m.syncs}
${m.syncsBehind}
${m.average}

保存您的
映射的请求属性的名称是什么?这是我在上面的代码-
模型中的名称。put(“testing”,mappings)测试
。看起来您有另一个同名的请求(或会话、应用程序或页面上下文)属性。是否可以为请求属性使用其他名称重试?因为你的代码中有AFAIC,所以应该可以用。用什么名字?你是说对于
测试
我还有其他名字吗?是的。。。我就是这么说的。试着为测试使用另一个更独特的名称。我认为缺少了一些东西。
c:forEach var=“m”value=“${e.value}”>
应该是
c:forEach var=“m”items=“${e.value}”>
顺便说一句,你的代码对我很有用:)谢谢你:)@ArkLinlin谢谢你指出代码的问题我已经相应地更新了答案。
<body>
    <table>
        <thead>
            <tr>
                <th>Machine Name</th>
                <th>T2_95</th>
                <th>T2_99</th>
                <th>Syncs</th>
                <th>Syncs Behind</th>
                <th>Average</th>
            </tr>
        </thead>
        <tbody>

        <c:set var="entry" value="${testing.datacenterMachines}"></c:set>
        <c:forEach 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>

        </tbody>
    </table>
</body>
<c:forEach var="e" items="${testing}">
  <h3>For <c:out value="${e.key}"/></h3>
    <table>
      <thead>
            <tr>
                <th>Machine Name</th>
                <th>T2_95</th>
                <th>T2_99</th>
                <th>Syncs</th>
                <th>Syncs Behind</th>
                <th>Average</th>
            </tr>
        </thead>
        <tbody>
          <c:forEach var="m" items="${e.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>
        </tbody>
    </table>
</c:forEach>
Don't know how to iterate over supplied "items" in &lt;forEach&gt;
<c:forEach var="e" items="${entry}">
  <h3>For <c:out value="${e.key}"/></h3>
    <table>
      <thead>
            <tr>
                <th>Machine Name</th>
                <th>T2_95</th>
                <th>T2_99</th>
                <th>Syncs</th>
                <th>Syncs Behind</th>
                <th>Average</th>
            </tr>
        </thead>
        <tbody>
          <c:forEach var="m" items="${e.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>
        </tbody>
    </table>
</c:forEach>