Как перебирать список на карте строки и список объектов с помощью JSTL?
Я работаю над проектом Spring MVC, в котором мне нужно передать объект из моего контроллера в 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
}
И ниже мой метод в моем контроллере, из которого мне нужно передать объект JSP, а затем повторить этот объект в JSP, чтобы отобразить данные в таблице -
@RequestMapping(value = "testOperation", method = RequestMethod.GET)
public Map<String, String> testData() {
final Map<String, String> model = new LinkedHashMap<String, String>();
// for datacenter 1
MachineMetrics metrics1 = new MachineMetrics();
metrics1.setAvg("10");
metrics1.setT2_95("100");
metrics1.setT2_99("200");
metrics1.setMachineName("machineA");
metrics1.setSyncs("100");
metrics1.setSyncsBehind("1000");
MachineMetrics metrics2 = new MachineMetrics();
metrics2.setAvg("20");
metrics2.setT2_95("200");
metrics2.setT2_99("300");
metrics2.setMachineName("machineB");
metrics2.setSyncs("200");
metrics2.setSyncsBehind("2000");
List<MachineMetrics> metrics = new LinkedList<MachineMetrics>();
metrics.add(metrics1);
metrics.add(metrics2);
DatacenterMachineMapping mappings = new DatacenterMachineMapping();
Map<String, List<MachineMetrics>> holder = new LinkedHashMap<String, List<MachineMetrics>>();
holder.put("dc1", metrics);
mappings.setDatacenterMachines(holder);
model.put("testing", mappings);
return model;
}
И ниже моя страница JSP. И я не уверен, как использовать вышеуказанный объект mappings
таким образом на странице 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>
<!-- this gives me exception -->
<c:forEach items="${testing.value}" var="m">
<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>
Я попытался использовать JSTL, как показано выше, и я пытался выполнить итерацию list
на карте, которую я передал из Controller в JSP, но почему-то это дает мне исключение, поскольку -
'${testing.value}' Property 'value' not found
Мои данные должны выглядеть так в таблице для Datacenter 1
после итерации списка в Map-
Machine Name T2_95 T2_99 Syncs Syncs Behind Average
machineA 100 200 100 1000 10
machineB 200 300 200 2000 20
Что-то плохое я здесь делаю?
Я отслеживаю свой предыдущий вопрос здесь. В этом вопросе объект ответа отличается, поскольку у меня есть карта строки и список здесь.
Ответы
Ответ 1
Я думаю, что это должно сработать.
<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>