2016-03-14 59 views
2

我正在爲訂購系統製作一個簡單的Intranet Web視圖,以顯示當前正在處理的所有訂單。但是我堅持用thymeleaf標記:Thymeleaf Table rows rows issue(1 Order,N Articles)

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; 
} 

什麼我要完成如下(按該順序1順序+ 3篇):

<table class="table table-striped table-hover table-middle table-condensed table-bordered"> 
    <thead> 
    <tr> 
     <th>OrderNr</th> 
     <th>Date</th> 
     <th>Article Number</th> 
     <th>ArticleName</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td rowspan="3">Order 32</td> 
     <td rowspan="3">27.03.2020</td> 
     <td>17442</td> 
     <td>Screws</td> 
    </tr> 
    <tr> 
     <td>023423</td> 
     <td>Potatoe</td> 
    </tr> 
    <tr> 
     <td>32342</td> 
     <td>YetAnotherItem</td> 
    </tr> 
    </tbody> 
</table> 

所有常用的東西應該是橫跨所有文章,文章應該每行看一條。然而,我不知道如何用兩種方法來實現這個目標:每個(一個用於訂單,一個用於訂單的物品)。我可以「扁平化」我的視圖(每行代表一個線對象),並且在標記中有很多ifs,但在我看來這是非常髒的黑客攻擊...

任何人都可以幫助我有更好的解決方案?

非常感謝!

回答

1
<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的comment

+0

這將在第一行產生空列,這可能會導致不希望的視覺效果(可能會被刪除)。另外問題是,這是如何與可訪問性一起工作的。但好主意,無論如何:) –

+0

@MartinC。對你的評論感興趣,測試了這個片段,並且......沒有空列。按預期合併所有單元格。當然,我沒有測試它的可訪問性。這只是一般的想法。 –

+0

用'

'測試出來,如果你有新的''中的第一篇文章,你會看到稍微的渲染差異。這是非常微妙的,我不認爲這是一個問題,只是想指出。 (免責聲明:我直接在問題提供的HTML上進行測試,而不是在Thymeleaf模板上) 只是要說清楚:我喜歡你的解決方案,它並不意味着批評。 –