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

