You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf模板中th:each循环未渲染问题排查求助

问题排查与修复方案

你的Thymeleaf循环未渲染的核心原因是循环变量引用错误,结合代码和日志分析如下:

1. 内层循环引用了不存在的变量

外层循环定义遍历${row}得到每一行数据puzzledata,但内层循环却试图遍历${cell}——这个变量在模型中根本不存在,自然不会生成任何DOM元素。

2. 变量名冲突导致逻辑混乱

内层循环的变量名row和外层模型变量${row}重名,即使后续修正,也会引发SpringEL表达式的解析混淆。

修正后的代码

<span th:fragment="view">
    <div class="centered">
        <h1 th:text="${sudoku_description}"></h1>
        <h1 th:text="${sudoku}"></h1>
        <div class="centered" >
            <!-- 遍历每一行数据,puzzledata是当前行的List -->
            <th:block th:each="puzzledata, rowStat : ${row}">
                <div class="sudoku-row" >
                    <!-- 遍历当前行的每个单元格数据 -->
                    <th:block th:each="cellData, colStat : ${puzzledata}">
                        <div class="sudoku-cell" 
                             th:attr="row=${rowStat.index}, col=${colStat.index}"
                             th:text="${cellData}"></div>
                    </th:block>
                </div>
            </th:block>
        </div>
       </div>
</span>

额外验证点

  • 确认模型中二维List的变量名确实是row:你提到${sudoku}能显示正确的二维List格式,若实际数据是存在sudoku变量中,外层循环需改为th:each="puzzledata, rowStat : ${sudoku}"。
  • 检查动态属性绑定:原代码中row="rowStat.index"是静态属性,需用th:attr或直接在属性前加th:才能动态绑定,否则会被当作字符串字面量。

内容的提问来源于stack exchange,提问作者Ian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:52:17