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
相关产品推荐
相关产品推荐

