如何使用JSTL根据Map中的键显示多个表?

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

如果Map大小为1,那么我可以在JSP页面中显示数据并且它可以正常工作。

现在假设如果Map大小为2,那么我想为地图中的每个键显示两个表。 这是我无法开展工作的原因。 对于我的用例,最大地图大小可以是3。

下面是我的class级,其中包含数据 –

public class DatacenterMachineMapping { private Map<String, List> 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 } 

以下是我的Controller中的方法,我需要将对象传递给JSP,然后在JSP中迭代该对象以显示表中的数据 –

 @RequestMapping(value = "testOperation", method = RequestMethod.GET) public Map testData() { final Map model = new LinkedHashMap(); // 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 metricsA = new LinkedList(); metricsA.add(metrics1); metricsA.add(metrics2); // for datacenter 2 MachineMetrics metrics3= new MachineMetrics(); metrics3.setAvg("30"); metrics3.setT2_95("300"); metrics3.setT2_99("300"); metrics3.setMachineName("machineC"); metrics3.setSyncs("300"); metrics3.setSyncsBehind("3000"); MachineMetrics metrics4 = new MachineMetrics(); metrics4.setAvg("40"); metrics4.setT2_95("400"); metrics4.setT2_99("400"); metrics4.setMachineName("machineD"); metrics4.setSyncs("400"); metrics4.setSyncsBehind("4000"); List metricsB = new LinkedList(); metricsB.add(metrics3); metricsB.add(metrics4); DatacenterMachineMapping mappings = new DatacenterMachineMapping(); Map<String, List> holder = new LinkedHashMap<String, List>(); holder.put("dc1", metricsA); holder.put("dc2", metricsB); mappings.setDatacenterMachines(holder); model.put("testing", mappings); // passing this object to jsp return model; } 

问题陈述:-

正如您在上面的代码中看到的,我有两个键,因为我有两个数据中心,一个是dc1 ,另一个是dc2 。 所以我想展示两个表 – 一个用于dc1及其机器,另一个表用于dc2及其机器,如下所示。

因此,在迭代testing对象后,我的数据应该如下所示 –

 For DC1 Machine Name T2_95 T2_99 Syncs Syncs Behind Average machineA 100 200 100 1000 10 machineB 200 300 200 2000 20 For DC2 Machine Name T2_95 T2_99 Syncs Syncs Behind Average machineC 300 300 300 3000 30 machineD 400 400 400 4000 40 

下面是我的JSP页面,它只适用于等于一的地图大小。我不知道如何在JSP页面中以这种方式迭代上面的mappings对象,以便我可以为我的上述用例显示两个表每个键一个,如上所示。 这可能吗?

  
Machine Name T2_95 T2_99 Syncs Syncs Behind Average
${m.machineName} ${m.t2_95} ${m.t2_99} ${m.syncs} ${m.syncsBehind} ${m.average}

任何想法如何在这里使我的JSP通用? 因为我可能有三个数据中心,因为目前我有两个数据中心。

我正在跟进我之前的问题,这有助于我迭代一个大小为1的地图,但不知道我如何为每个密钥分别设置两个表

更新: –

这是我尝试过的,它对我不起作用 –

  

For

Machine Name T2_95 T2_99 Syncs Syncs Behind Average
${m.machineName} ${m.t2_95} ${m.t2_99} ${m.syncs} ${m.syncsBehind} ${m.average}

而我正在低于例外,我不确定我在这里做错了什么? –

 Don't know how to iterate over supplied "items" in <forEach> 

尝试这个 –

  

For

Machine Name T2_95 T2_99 Syncs Syncs Behind Average
${m.machineName} ${m.t2_95} ${m.t2_99} ${m.syncs} ${m.syncsBehind} ${m.average}