当前位置: 首页 > 知识库问答 >
问题:

Thyemleaf嵌套迭代触发器org.thymeleaf.exceptions.TemplateInputException

田普松
2023-03-14

我试图遍历一个对象列表,并为每个4对象生成一个div class=“card-deck”,并为每个对象生成一个嵌套的div class=“card”

这是生成第234行异常的代码

更新:注意:第234行在HTML中提到并且有<!--错误-第234行-->,因为${#numbers.sequence(0,3}处缺少)

    <div class="card-deck" th:each="qr: ${objects}" th:if="${qr.tableid}%4==0"> <!-- Iterate every 4 objects -->

    <!--syntax error missed clossing ) at ${#numbers.sequence(0,3) triggered the exception here -->
    <div class="card" th:each="i : ${#numbers.sequence(0,3)} ">   <!-- Error-Line 234 -->


        <!-- Some More Code -->
        <img th:src="${qr.qrcodestaticpath}" class="card-img-top" alt="...">
        <div class="card-body">
            <h5 class="card-title" align="center" th:text="'Table '+${qr.tableid}"></h5>
            <p class="card-text" align="center" th:text="'Random Generated QR Code'"></p>
            <h6 align="center" th:text=" ${qr.qrcodestring}"></h6>

        </div>
    </div>
  </div>

templateInputException:模板解析过程中发生错误(模板:“类路径资源[templates/qrcodes.html]”-第234行,第10行)

我已经讨论过这些话题了

  • 在Thymeleaf中如何处理if-else?
  • Thymeleaf循环直到一个数字
  • 带有Thymeleaf的嵌套(双)循环
  • Thymeleaf-如何按索引循环列表

并浏览了这些文档

    Thymeleaf Baeldung中的
  • 迭代

并且仍然无法找到一种正确的方法来完成它,而不触发异常

    null
int numOfObjects=11;
    for(int i=0 ;i<numOfObjects;i++)
    {
        if(i%4==0)
        {
           System.out.println();
           System.out.print("Deck:");
        }
          System.out.print("Card"+(i+1)+" ");    
     }

产出:

这是我的控制器

@GetMapping("/qrcodes")
      public String greetingForm(Model model) {

        List<QrObject> qr =qrRepo.findAll();
        int numOfobj= qr.size();
        int decks;

        if(numOfobj % 4==0)
            decks = numOfobj / 4 ;
        else
            decks = (numOfobj / 4) +1 ;

        int posa_periseuoun = numOfobj % 4 ;
        model.addAttribute("objects", qr);
        model.addAttribute("decks",decks);
        model.addAttribute("cards",posa_periseuoun);
        model.addAttribute("size", numOfobj);
        return "qrcodes";
      }

共有1个答案

曹高阳
2023-03-14

这里有一个方法,我认为它代表了你正在努力做的事情。

跳转到最终结果,这将在浏览器中显示以下文本:

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>
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);
<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>
 类似资料:
  • 你好,我想在嵌套表中创建一个触发器,以验证在输入作者时,这不是18岁以下。 但是当我创建触发器时,sql开发人员说 错误(4,9): PL/SQL:语句忽略错误(4,110): PLS-00302:组件'NACIMIENTO'必须声明错误(6,9): PL/SQL:语句忽略错误(6,40): PLS-00302:组件'NACIMIENTO'必须声明 插入的数据是:

  • 我有以下python生成器: 而且我想在Java中实现一个迭代器,它的行为有点像以前的生成器。我试图使用两个内部迭代器,但它不起作用。想法?

  • 假设我有一个包含集合的对象,所述集合上的每个元素都包含一个集合,每个集合都包含一个集合。 我想在最深的对象上迭代,并对其应用相同的代码。 命令式的方法是微不足道的,但有没有一种方法来完成这一切? 我可以看到如何从最深的循环中生成lambda: 但我能做得更多吗?

  • 本文向大家介绍Python中的扁平化嵌套列表迭代器,包括了Python中的扁平化嵌套列表迭代器的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个嵌套的整数列表;我们必须实现一个迭代器以使其扁平化。每个元素可以是整数,也可以是列表。该列表的元素也可以是整数或其他列表。因此,如果输入类似于[[1,1],2,[1,1]],则输出将为[1,1,2,1,1,1] 为了解决这个问题,我们将遵循以下步骤-

  • 我发现了这个关于使用限定符进行可迭代到不可迭代映射的示例: 但是,如果我想从emails集合的第一个元素中提取一个特定的字段,例如,就像我处理code一样? 例如,我希望编写如下的映射:

  • mapMap.map(i => i * 30); const mapReduce = Immutable.Map({ a: 10, b: 20, c: 30 });