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

Thymeleaf th:if报EL1012E:Cannot index into a null value 校验不生效

问题根因

报错和校验逻辑失效是两个写法问题共同导致的:

  • 表达式上下文不匹配:th:text 用 *{...} 选择语法,读取的是 th:object 绑定对象下的 dataList 属性;但 th:if 里写的是 ${...} 全局语法,会直接从Model根域找dataList,根域没有这个属性时值为null,自然触发EL1012E: Cannot index into a null value报错,条件判断根本不会正常执行。
  • 冗余的下标取值逻辑:th:each 已经迭代出了当前行的row对象,完全没必要再通过dataList[下标]回取属性,写法多余还容易踩上下文不匹配的坑。
修复代码

直接用迭代出的row对象读属性,统一表达式上下文即可:

<div class="mylist" th:each="row,rowStat : *{dataList}">
   Folder: <span th:text="*{row.folderName}" />
   <div class="invalid-feedback"
        th:if="*{row.folderName == appFolderName}">                           
        Folder already exists. Please choose different folder name.
   </div>
</div>

如果有特殊需求必须保留下标取值的写法,只要把th:if里的${...}改成*{...},和外层遍历的上下文保持一致就行:

<div class="invalid-feedback"
     th:if="*{dataList[__${rowStat.index}__].folderName == appFolderName}">
     Folder already exists. Please choose different folder name.
</div>
注意点
  • Thymeleaf里*{...}是基于th:object绑定的对象作为根节点解析属性,${...}是基于整个Model根上下文解析,二者查找路径不一样,混用时很容易出现空值问题。
  • th:each循环场景优先直接用声明好的迭代变量(比如示例里的row),写法更简洁,也不会出现下标越界、上下文不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:57:22