Java 如何使用JSTL根据映射中的键显示多个表?
我有一个字符串映射和对象列表,其中包含每个数据中心及其机器。我目前正在从我的控制器将这个对象传递给JSP,然后在JSP页面中迭代它以显示数据 如果映射大小为1,那么我就能够在JSP页面中显示数据,并且工作正常 现在假设映射大小为2,那么我想显示两个表,映射中每个键对应一个表。这是我无法做到的。对于我的用例,映射的最大大小可以是3 以下是我的班级,其中包含数据-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,
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)我正在JSP中使用测试。看起来您有另一个同名的请求(或会话、应用程序或页面上下文)属性。是否可以为请求属性使用其他名称重试?因为你的代码中有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 <forEach>
<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>