如何使用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}