Вот подход, который, я думаю, представляет собой то, что вы пытаетесь сделать.
Конечный результат
Если перейти к конечному результату, в браузере отобразится следующий текст:
Deck: Card1 Card2 Card3 Card4
Deck: Card5 Card6 Card7 Card8
Deck: Card9 Card10 Card11
Более полезно, HTML выглядит следующим образом:
<div class="card-deck">
<span>Deck: </span>
<span class="card">Card1 </span>
<span class="card">Card2 </span>
<span class="card">Card3 </span>
<span class="card">Card4 </span>
</div>
<div class="card-deck">
<span>Deck: </span>
<span class="card">Card5 </span>
<span class="card">Card6 </span>
<span class="card">Card7 </span>
<span class="card">Card8 </span>
</div>
<div class="card-deck">
<span>Deck: </span>
<span class="card">Card9 </span>
<span class="card">Card10 </span>
<span class="card">Card11 </span>
</div>
Java Объекты
Палуба:
public class Deck {
private final String deckName;
private final List<Card> cards = new ArrayList();
public Deck(String deckName) {
this.deckName = deckName;
}
public List<Card> getCards() {
return cards;
}
public String getDeckName() {
return deckName;
}
}
Карта:
public class Card {
private final String cardName;
public Card(String cardName) {
this.cardName = cardName;
}
public String getCardName() {
return cardName;
}
}
Сборка колод:
Map<String, Object> model = new HashMap();
// this is equivalent to your findAll()...
List<Card> allCards = new ArrayList();
for (int i = 1; i<= 11; i++) {
allCards.add(new Card("Card" + i));
}
int maxCardsPerDeck = 4;
List<Deck> decks = new ArrayList();
Deck deck;
List<Card> deckCards = new ArrayList();
int cardCount = 0;
for (Card card : allCards) {
cardCount++;
deckCards.add(card);
if (cardCount % maxCardsPerDeck == 0 ||
cardCount == allCards.size()) {
deck = new Deck("Deck");
deck.getCards().addAll(deckCards);
decks.add(deck);
deckCards.clear();
}
}
model.put("decks", decks);
Приведенный выше код довольно грубый - возможно, его можно улучшить. Но суть в том, что он собирает коллекцию колод, каждая из которых содержит не более максимально допустимого количества карт (в данном примере - 4).
Thymeleaf
<div class="card-deck"
th:each="deck: ${decks}">
<span th:text="${deck.deckName + ': '}">
</span>
<span class="card"
th:each="card: ${deck.cards}"
th:text="${card.cardName + ' '}">
</span>
</div>
Я использовал <span>
s здесь, просто так все выровнено. Вы можете использовать все, что вам нужно, и предоставить стиль CSS, который вам нужен.