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

Thymeleaf嵌套遍历集合报错:无法解析循环表达式求助

解决Thymeleaf遍历Route中Points集合的问题

嘿,我来帮你搞定这个模板解析的问题!先看看你遇到的两个核心问题:

1. Thymeleaf遍历语法错误

你写的th:each="point : {route?.points}"少了Thymeleaf变量表达式的$符号,Thymeleaf无法识别这种格式的表达式,这就是抛出TemplateProcessingException的直接原因。正确的写法应该是用${route?.points}来引用要遍历的集合。

2. HTML结构不合法

你直接在一个<tr>标签里嵌套了另一个<tr>,这不符合HTML的规范,浏览器渲染时会出现结构混乱的问题。我们需要把Points的展示内容放在一个单独的<td>单元格内,再用子表格或者列表来呈现每个Point的信息。

修正后的完整代码

<tr th:if="${routes!=null}" th:each="route : ${routes}">
  <td><span th:text="${route?.name}"> name </span></td>
  <td><span th:text="${route?.pointsForRoute}"> pointsForRoute </span></td>
  <td><span th:text="${route?.routeLength}"> routeLength </span></td>
  <td><span th:text="${route?.heightDiffrence}"> heightDiffrence </span></td>
  <!-- 将Points的展示放入单独的td,用子表格承载 -->
  <td>
    <table>
      <!-- 遍历Route的points集合 -->
      <tr th:if="${route?.points != null}" th:each="point : ${route?.points}">
        <td><span th:text="${point?.name}"> point name </span></td>
      </tr>
      <!-- 处理points为空的情况 -->
      <tr th:if="${route?.points == null or route.points.isEmpty()}">
        <td>No points available</td>
      </tr>
    </table>
  </td>
</tr>

额外注意事项

因为你的Route实体中points字段是**懒加载(FetchType.LAZY)**的,在Thymeleaf模板中直接访问时可能会触发懒加载异常。解决这个问题可以有两种方式:

  • 在查询Route数据时,使用JOIN FETCH关联查询points集合,确保数据在模板渲染前已经加载完成;
  • 在Service层调用route.getPoints().size()(或者其他触发集合初始化的方法),提前加载points数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:41:04