三元运算符返回0而不是字符串

时间:2015-10-22 10:53:41

标签: spring thymeleaf spring-el

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

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

<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 : "∞"}|

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

开头有一个问题&#34; +&#34;签署和&#34;:&#34;标志。这个有效:

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

答案 2 :(得分:0)

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