【发布时间】:2021-12-02 09:50:44
【问题描述】:
我有一个 Thymeleaf 模板,没有使用任何 Spring 或 SpEL - 只是 Thymeleaf 标准方言。
模板的相关部分是:
<div>
<span>Inactive: </span>
<span th:text="${total - active}"></span>
</div>
测试 1
如果我的模型填充如下:
model.put("total", 10);
model.put("active", 7);
然后我得到预期的结果:
<div>
<span>Inactive: </span>
<span>3</span>
</div>
测试 2
但如果模型值中的一个(或两个)为空:
model.put("total", null);
model.put("active", 7);
然后我得到了一个意想不到的结果。有了上面的数据,我得到:
<div>
<span>Inactive: </span>
<span>-7.0</span>
</div>
换句话说,null 被计算为浮点数0.0,因此计算结果为-7.0。
我原以为它会抛出一个运行时错误,这是由于尝试对空值执行算术而引起的。
测试 3
如果我稍微更改模板并使用与测试 2 相同的数据:
<div>
<span>Inactive: </span>
<span th:text="${total} - ${active}"></span>
</div>
我收到以下运行时错误 - 这是我对测试 2 的预期:
org.thymeleaf.exceptions.TemplateProcessingException:无法执行减法:操作数为“null”和“7”
为什么测试 2 会生成具有意外计算结果的有效 HTML,而不是抛出错误?
(我知道我需要预先处理这些 null 值以避免出现问题,但是这种无声的非失败是一个问题。)
【问题讨论】: