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

使用Thymeleaf标准方言执行算术运算得到非预期结果问题

问题原因分析

这个差异是Thymeleaf标准方言默认使用的OGNL表达式引擎的运算规则和Thymeleaf自身的文本运算规则不一致导致的,具体如下:

  • 测试2的表达式${total - active}完整包裹在同一个${}块内,所有运算逻辑由OGNL引擎处理。OGNL的算术运算默认采用宽松的空值处理策略:会自动把null转换为浮点型0.0参与运算,不会触发空值异常,所以你会得到0.0 -7 = -7.0的结果。
  • 测试3的表达式${total} - ${active}中,减号不在${}内部,两个变量是分别由OGNL解析出值之后,交给Thymeleaf自身的运算逻辑处理。而Thymeleaf原生的算术运算对空值做严格校验,只要操作数存在null就会直接抛出异常,符合你预期的行为。
规避方案

如果想让测试2的场景也触发异常避免静默出错,可以采用下面的方案:

  1. 调整OGNL的配置,开启严格空值处理:禁用OGNL默认的null转0的逻辑,运算时遇到null直接抛出异常。
  2. 模板表达式中主动显式处理空值,比如给参数指定默认值:
<span th:text="${(total?:0) - (active?:0)}"></span>
  1. 后端填充Model时保证参与算术运算的参数非空,从数据源头上避免null值进入模板运算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:03