2014-11-23 18 views
7

Ho il modello, dove per quattro elementi li dovrei avere un elemento ul. Come dovrei farlo? Ora ho qualcosa di simile:Come eseguire l'iterazione per gli elementi X in Thymeleaf?

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

ho pensato if condizione sarà applicata al ul elemento Elvery, ma nascondere ogni cosa, compreso li elemento.

+0

Così si desidera un nuovo marchio lista non ordinata per ogni elemento invece di una nuova riga nella lista? – Aeseir

+0

Ho bisogno di una lista con quattro elementi. Un modo per raggiungerlo è creare liste per ogni quattro elementi. Ma spero che ci sia un modo per fare quello che voglio con una sola lista. – Dracontis

+0

Se hai bisogno di una lista con 4 elementi, qual è lo scopo th: if = "$ {iterStat.index}/4 == 0" serve? non funzionerà mai a meno dell'indice = 0. Se vuoi un elenco con 4 elementi, esegui semplicemente l'iterazione 4 volte. Aggiungerò una risposta per te. – Aeseir

risposta

9

Come da vostri commenti, avete bisogno di una lista con 4 articoli, il seguito farà il trucco. Fammi sapere se hai problemi di

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

EDIT 1: Ulteriori revisione basata su dati forniti rendimenti un'altra possibilità. Uso Mappa invece di massa liste di controllo prima di passare:

Map<String, List<Excursion>> excursionsList; 

Assicurarsi di limitare ogni escursione a 4 (come richiedete). Quindi in Thymeleaf scorrere la mappa.

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

Questo dovrebbe pulire gli heap del codice e renderlo come necessario.

+0

Ho più di 4 escursioni (ad esempio 5 o 10) e desidero suddividere questa lista in ul elenchi con 4 elementi ciascuno. mostra solo i primi 4 record – Dracontis

+0

Ok penso che tu debba riscrivere la tua domanda per chiarire che cosa esattamente dopo, è molto difficile da capire chiaramente Sto assumendo che stai cercando di implementare qualche tipo di modulo in modo che ogni 4 iterazione tu creare una nuova lista? È corretto? – Aeseir

+0

Ho postato la mia risposta. Se potessi riscriverla usando una sola lista, sceglierò la tua risposta. – Dracontis

1

Quello che ho fatto per ottenere ciò che voglio. Controller:

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

E thymeleaf modello:

  <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> 
Problemi correlati