Thymeleaf 迭代地图的地图以创建 table 与 rowspans

Thymeleaf iterate map of maps to create table with rowspans

假设我有

Date occuranceDate; //Dates only have years, months, days 
String eventOwner;
String eventData; 

示例数据:

12-01-2021 , John Doe, random event data 1
12-01-2021, Jane Doe, random event data 2
12-01-2021, Jane Doe, random event data 3
12-02-2021, John Doe, random event data 4

我正在尝试用 thymeleaf 创建一个 table,它有三列 Event Date, Event Owner, event Data。这样

  1. 事件日期的行跨度大小等于该日期的事件数据数。
  2. 事件所有者的行跨度大小等于该事件所有者在该日期的事件数据数
  3. 事件数据

对于上面的数据,table想要

我想创建一个 table 来显示 eventData 的列表,按 eventOwner 分组,按 occuranceDate

分组

我正在将 Map<Date, Map<String, List<String>>> 传递给 Thymeleaf(我愿意更改数据结构)。对于如何生成 table 的任何帮助,我将不胜感激,事实证明它非常复杂。

我尝试了以下操作: 但由于代表嵌套地图和列表的三个不同列,这变得很复杂

您只需 List<Event> 即可完成此操作。 (我确实添加了一个变量 occuranceDateString,它只是 occuranceDate 的字符串版本。)

<table>
  <tr   th:each="event, stat: ${events}"
        th:with="
          newDate=${(stat.index == 0) || (events[stat.index - 1].occuranceDateString != event.occuranceDateString)},
          newOwner=${newDate || (stat.index == 0) || (events[stat.index - 1].eventOwner != event.eventOwner)},
        " valign="top">
    <td th:if="${newDate}" th:text="${event.occuranceDateString}" th:rowspan="${events.?[occuranceDateString == #root.event.occuranceDateString].size()}" />
    <td th:if="${newOwner}" th:text="${event.eventOwner}" th:rowspan="${events.?[occuranceDateString == #root.event.occuranceDateString].?[eventOwner == #root.event.eventOwner].size()}" />
    <td th:text="${event.eventData}" />
  </tr>      
</table>