三元运算符 returns 0 代替字符串

Ternary operator returns 0 instead of character string

我正在将我的 Spring MVC 应用程序从 JSP 页面重写到 Thymeleaf 模板。但是,我遇到了以下问题。

当我使用具有不同类型结果的三元运算符时,即 java.lang.Stringjava.lang.Integer 如果不满足三元运算符中的条件,则字符串始终显示为 0 .

<p th:text="#{free_transfers} + ': ' + (${i ne T(java.lang.Integer).MAX_VALUE}
? ${i} : '∞')">Cumulated free transfers: ∞</p>

结果 HTML 然而

<p>Free transfers: 0</p>

如果 i 等于 Integer.MAX_VALUE.

起初我以为这是因为第二个参数是int类型,所以我明确地添加了对字符串的转换。

<p th:text="#{free_transfers} + ': ' + (${i ne T(java.lang.Integer).MAX_VALUE}
? ${#strings.toString(i)} : '∞')">Cumulated free transfers: ∞</p>

然而这确实改变了一切,结果仍然是

<p>Free transfers: 0</p>

有没有人知道如何达到预期的结果

<p>Free transfers: ∞</p>

?

我也试过这些,但都没有成功。

|#{free_transfers}: ${i ne T(Integer).MAX_VALUE ? #strings.toString(i) : "∞"}|

|#{free_transfers}: ${i ne T(Integer).MAX_VALUE ? i : "∞"}|

它应该在一个 ${} 表达式中,你也可能不需要 toString 只需使用 i

  ${i ne T(java.lang.Integer).MAX_VALUE ? i : '∞'}

开头“+”号和“:”号的顺序有问题。这个有效:

<p th:text="'Free transfers :'+ (${i ne T(java.lang.Integer).MAX_VALUE}
? ${i} : '∞')">Cumulated free transfers: ∞</p>

问题实际上出在提供 i 变量值的部分。它提供了 0 而不是 Integer.MAX_VALUE,所以难怪它显示为 0