2014-11-23 99 views
7

我有模板,其中四個li元素我應該有一個ul元素。我應該怎麼做?現在我有這樣的:如何迭代Thymeleaf中的X項目?

<div th:each="excursion,iterStat : ${excursions}"> 
    <ul th:if="${iterStat.index}/4 == 0"> 
     <li> 
      <a th:href="@{/excursion/{id}(id=${excursion.excursionId})}"><img src="/template/images/garden1.jpg" alt="Image" /></a> 
      <h2 th:text="${excursion.title}"></h2> 
      <p th:text="${#strings.abbreviate(excursion.description,128)}"></p> 
     </li> 
    </ul> 
</div> 

我想if條件將被應用到elvery ul元素,但它隱藏的每一件事情,包括li元素。

+0

所以,你要爲每一個項目,而不是在列表只是一個新行一個全新的無序列表? – Aeseir 2014-11-24 00:08:02

+0

我需要有四個元素的列表。實現它的一個方法是爲每四個元素製作一個列表。但我希望有一種方法可以只用一個列表來完成我想要的功能。 – Dracontis 2014-11-24 10:12:48

+0

如果您需要一個包含4個元素的列表,那麼th:if =「$ {iterStat.index}/4 == 0」的用途是什麼?它將永遠不會工作,除非index = 0。如果你想要4個元素的列表,那麼只需迭代4次。我會爲你添加答案。 – Aeseir 2014-11-24 10:24:50

回答

9

根據你的意見,你需要一個列表與4項,下面將做的伎倆。讓我知道如果你有問題

<ul> 
<div th:each="excursion,iterStat : ${excursions}" th:if="${iterStat.index}<5">  
     <li> 
      <a th:href="@{/excursion/{id}(id=${excursion.excursionId})}"><img src="/template/images/garden1.jpg" alt="Image" /></a> 
      <h2 th:text="${excursion.title}"></h2> 
      <p th:text="${#strings.abbreviate(excursion.description,128)}"></p> 
     </li>  
</div> 
</ul> 

編輯1:根據提供的數據 進一步審查產生了另一種可能性。在控制器 使用地圖,而不是質量列表你傳遞前:

Map<String, List<Excursion>> excursionsList; 

確保你限制每個遊4(根據您的需要)。 然後在Thymeleaf中遍歷地圖。

<div th:each="excursion,rowStat : *{excursionsList}"> 
<ul> 
<div th:each="list,iterStat : *{excursion[__${rowStat.index}__].value}"> 
//your code for each list item information such as excursionId, description etc. 
</div> 
</ul> 
</div> 

這應該清理你的代碼堆並根據你的需要進行修改。

+0

我有4個以上的遊覽(例如5或10),我想將這個列表分成4個元素的ul列表。只顯示前4條記錄 – Dracontis 2014-11-24 10:35:15

+0

好的,我認爲你需要重寫你的問題來澄清你後面的內容,這很難理解,我假設你正在尋求實現某種類型的模數,以便每第4次迭代創建一個新的列表?這是正確的嗎? – Aeseir 2014-11-24 12:24:59

+0

發表我的答案。如果你可以只用一個列表重寫它,我會選擇你的答案。 – Dracontis 2014-11-24 13:13:33

1

我已經做了什麼來實現我想要的。控制器:

@RequestMapping("/") 
public String index(Model model) 
{ 
    List<Excursion> excursions = excursionDao.findAll(); 
    List<List<Excursion>> excursionsLists = new LinkedList<List<Excursion>>(); 
    List<Excursion> tempList = new LinkedList<Excursion>(); 

    int listSize = excursions.size(); 
    for (int i = 0; i < listSize; i++) 
    { 
     tempList.add(excursions.get(i)); 
     if (listSize == (i+1) || tempList.size() == 4) 
     { 
      excursionsLists.add(tempList); 
      tempList = new LinkedList<Excursion>(); 
     } 
    } 

    model.addAttribute("excursionsLists", excursionsLists); 
    return "index"; 
} 

而且thymeleaf模板:

  <ul th:each="excursionsList : ${excursionsLists}"> 
       <li th:each="excursion : ${excursionsList}"> 
        <a th:href="@{/excursion/{id}(id=${excursion.excursionId})}"><img src="/template/images/garden1.jpg" alt="Image" /></a> 
        <h2 th:text="${excursion.title}"></h2> 
        <p th:text="${#strings.abbreviate(excursion.description,128)}"></p> 
       </li> 
      </ul>