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

SpringBoot+Kotlin中Thymeleaf内联迭代模板解析错误排查

解决Thymeleaf内联迭代function为null的报错问题

我来帮你搞定这个问题!你遇到的核心问题是内联迭代时变量function为null导致的属性访问错误,而标签式迭代能正常运行,下面是具体的原因分析和解决方案:

1. 先检查迭代数据源的变量名一致性

你标签式迭代用的是${geApp.premises},但内联迭代写的是${application.premises}——这两个变量名完全不一样!如果application对象本身是null,或者application.premises没有数据,那迭代时function自然会是null,触发属性访问异常。

先把内联迭代的数据源改成和标签式一致的:

[# th:each="function : ${geApp.premises}"] [[${function.streetName}]] [/]

2. 处理集合中的null元素(如果存在)

如果premises数组里本身包含null元素,可能标签式迭代因为版本兼容等原因没触发报错,但内联迭代会严格执行属性访问。这时候可以用Kotlin的空安全操作符?.来避免异常:

[# th:each="function : ${geApp.premises}"] [[${function?.streetName}]] [/]

这样即使function是null,也只会输出空字符串,不会抛出模板解析异常。

3. 确保Thymeleaf版本兼容

如果你用的是较旧的Thymeleaf版本,内联迭代的语法可能存在bug。建议升级到Thymeleaf 3.1.x及以上的稳定版本:

  • 如果你用Spring Boot 3.x,默认搭配的Thymeleaf版本已经是兼容的;
  • 如果你用Spring Boot 2.x,可以手动在pom.xml或build.gradle中升级Thymeleaf依赖到合适版本。

正确内联迭代写法示例

确认你的内联语法是合规的,Thymeleaf的内联迭代块[# ... /]完全支持th:each,正确写法如下:

<!-- 假设数据源是正确的geApp.premises,可按需添加分隔符 -->
[# th:each="premise : ${geApp.premises}"]
  [[${premise.streetName}]]
  [# th:if="${!premiseStat.last}"], [/]
[/]

这样就能彻底摆脱<span>标签,纯用内联迭代实现需求啦!

内容的提问来源于stack exchange,提问作者Ask the cat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:22:45