【问题标题】:Outputting Map<String, Map<String,List<String>>> in jsp using jstl使用 jstl 在 jsp 中输出 Map<String, Map<String,List<String>>>
【发布时间】:2016-01-14 18:51:40
【问题描述】:

我有以下格式的数据。

Map<String, Map<String,List<String>>>

示例 - {ProfileAdaptarRepository={active=[true,false,true,true]}}}

我确实在下面的脚本中的mymap 中设置了页面上下文,它工作得非常好。

<%  pageContext.setAttribute("mymap",example);%>

我需要以下 html 表格格式的数据:

上图的示例 HTML 源代码。

<html>
<body>
<table border="1">
		<tr>
			<th>Component</th>
			<th>Properties</th>
			<th>J01</th>
			<th>J02</th>
			<th>W01</th>
			<th>W02</th>

		</tr>
		<tr>
			<td>StoreConfiguration</td>
			<td>active</td>
			<td>true</td>
			<td>false</td>
			<td>true</td>
			<td>false</td>

		</tr>
		
		<tr>
			<td>DynamoConfiguration</td>
			<td>enabled</td>
			<td>true</td>
			<td>false</td>
			<td>true</td>
			<td>false</td>

		</tr>
 </table>
 
 </body>
 </html>

我尝试使用下面的jstl 代码在网页中呈现上述数据,但它不适用于多个组件值(超过 1 个组件)

<c:forEach var = "comp" items="${mymap}">
    <tr>
        <td>${comp.key}</td>
        <c:forEach var="prop" items="${comp.value}">
             <td>${prop.key}</td>
             <c:forEach var="val" items="${prop.value}">
                  <td>${val}</td>
             </c:forEach>
        </c:forEach>
    </tr>
</c:forEach>

有人可以帮助或指导我实现所需的表格格式吗?

非常感谢提前..:)

【问题讨论】:

  • 使用真正嵌套的集合(Map>>)通常被认为是不好的做法。将来在代码上工作的其他任何人都无法阅读。哎呀,六个月后当你回到这段代码时,你可能不记得它做了什么。我强烈建议您将数据结构更改为实际的类(即使它与 Row 和 Column 一样通用)。这也将帮助您遍历您的 forEach 列表。
  • @Allen,非常感谢您的意见。我同意你的看法,这是糟糕的代码。它实际上不是一个不变的网页,所以我最终弄得一团糟,这应该足以处理 Java 源代码。我不能回去改回 java 源代码,因为我花了很多时间来格式化这张地图。因此,如果您将解决方案传递给我,那将有很大帮助。我对 java Web 编程比较陌生...:) 谢谢..
  • @harshavmb 您将花费更多时间尝试输出它或尝试在将来进行更改,例如排序。因此,如果您使用普通 DTO 对象列表会更好。每个表格行一个对象。

标签: java html jsp jstl html-table


【解决方案1】:

我能够使用多个组件运行您的代码。我创建了一个像你这样的数据结构

        List<String> myListStore = new ArrayList<>();
        List<String> myListDynamo = new ArrayList<>();
        List<String> myListProfile = new ArrayList<>();
        Map<String, List<String>> myMapStore = new HashMap<>();
        Map<String, List<String>> myMapDynamo = new HashMap<>();
        Map<String, List<String>> myMapProfile = new HashMap<>();
        Map<String, Map<String, List<String>>> myBigMap = new HashMap<>();

        myListDynamo.add("true");
        myListDynamo.add("false");
        myListDynamo.add("true");
        myListDynamo.add("false");
        myMapDynamo.put("enabled", myListDynamo);
        myBigMap.put("Dynamo", myMapDynamo);

        myListStore.add("true");
        myListStore.add("false");
        myListStore.add("true");
        myListStore.add("true");
        myMapStore.put("disabled", myListStore);
        myBigMap.put("Store", myMapStore);

        myListProfile.add("true");
        myListProfile.add("false");
        myListProfile.add("true");
        myListProfile.add("true");
        myMapProfile.put("disabled", myListProfile);
        myBigMap.put("Profile", myMapProfile);

        request.setAttribute("mymap", myBigMap);

我使用了您的确切 jstl 代码并且能够生成表格。您确定您的数据在数据结构中的格式正确吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 2020-08-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多