Java 行跨度为的Thymeleaf表问题(1个订单,N个项目)

Java 行跨度为的Thymeleaf表问题(1个订单,N个项目),java,spring,spring-mvc,thymeleaf,Java,Spring,Spring Mvc,Thymeleaf,我正在为订购系统制作一个简单的intranet web视图,以显示当前正在处理的所有订单。但是,我仍然坚持使用thymeleaf标记: public class Order { private Factory factory; private String orderNumber; private Date orderDate; .... private List<Article> articles; } public class Article {

我正在为订购系统制作一个简单的intranet web视图,以显示当前正在处理的所有订单。但是,我仍然坚持使用thymeleaf标记:

public class Order {
  private Factory factory;

  private String orderNumber;

  private Date orderDate;

  ....

  private List<Article> articles;
}

public class Article {

  private String number;

  private String name;
}
公共类秩序{
私营工厂;
私有字符串orderNumber;
私有日期orderDate;
....
私人物品清单;
}
公共类文章{
私有字符串编号;
私有字符串名称;
}
我想完成的是以下几点(按顺序为1篇文章+3篇文章):


订单号
日期
物品编号
商品名称
第32号令
27.03.2020
17442
螺钉
023423
波塔托
32342
YetAnotherItem
所有常见的东西都应该在所有文章中划一行,并且每行都应该查看一篇文章。然而,我不知道如何用两个th实现这一点:每个th(一个用于订单,一个用于订单条款)。我可以在标记中使用大量的ifs“展平”我的视图(每一行由一个line对象表示),但在我看来这是一个非常肮脏的黑客行为

有人能帮我找到更好的解决办法吗

非常感谢


 <table>
     <thead>
         <tr>
             <th>OrderNr</th>
             <th>Date</th>
             <th>Article Number</th>
             <th>ArticleName</th>
         </tr>
     </thead>
     <tbody>
        <div th:remove="tag" th:each="order:${orderList}" 
             th:with="articleCount=${order.articleList.size()}">
            <tr>
                <td th:text="${order.orderNumber}" th:rowspan="${order.articleList.size()}"></td>
                <td th:text="${order.orderDate}" th:rowspan="${order.articleList.size()}"></td>
                <td th:text="${articleCount>0}?${order.articles[0].number}:''"></td>
                <td th:text="${articleCount>0}?${order.articles[0].name}:''"></td>
            </tr>
            <tr th:each="article,stats:${order.articles}" th:if="${!stats.first}">
                <td th:text="${article.number}"></td>
                <td th:text="${article.name}"></td>
            </tr>
        </div>
     </tbody>
</table>
订单号 日期 物品编号 商品名称
th:remove=“tag”
用于生成表后删除
div


更改以避免渲染问题。由于@Martin C.

的原因,这将在第一行中产生空列,这可能会导致不需要的视觉效果(可能会被样式化)。还有一个问题是,这是如何与可访问性一起工作的。但无论如何,这是个好主意:)@MartinC。对你的评论很感兴趣,测试了这个片段并。。。没有空列。Rowspan按预期合并了所有单元格。当然,我没有测试它的可访问性。这只是一个大概的想法。用
测试一下,如果你在一篇新的
中有了第一篇文章,你会看到一个轻微的渲染差异。这是非常微妙的,我不认为这是一个问题,只是想指出它。(免责声明:我直接在问题中提供的HTML上测试了这一点,而不是在Thymeleaf模板上)只是为了明确:我喜欢你的解决方案,它不是批评。@MartinC。你是对的。在详细的比较中,我们确实看到了rendering@MartinC. 我更改了模板代码。非常感谢您的评论。
 <table>
     <thead>
         <tr>
             <th>OrderNr</th>
             <th>Date</th>
             <th>Article Number</th>
             <th>ArticleName</th>
         </tr>
     </thead>
     <tbody>
        <div th:remove="tag" th:each="order:${orderList}" 
             th:with="articleCount=${order.articleList.size()}">
            <tr>
                <td th:text="${order.orderNumber}" th:rowspan="${order.articleList.size()}"></td>
                <td th:text="${order.orderDate}" th:rowspan="${order.articleList.size()}"></td>
                <td th:text="${articleCount>0}?${order.articles[0].number}:''"></td>
                <td th:text="${articleCount>0}?${order.articles[0].name}:''"></td>
            </tr>
            <tr th:each="article,stats:${order.articles}" th:if="${!stats.first}">
                <td th:text="${article.number}"></td>
                <td th:text="${article.name}"></td>
            </tr>
        </div>
     </tbody>
</table>