Thymeleaf开关块返回不正确的值

时间:2018-06-10 10:09:24

标签: spring spring-mvc thymeleaf

我的百万富翁页面中有一个开关块,我根据用户的声誉分数显示图像:

<h1>
    <span th:text="#{user.reputation} + ${reputation}">Reputation</span>
</h1>
<div th:if="${reputation lt 0}">
    <img th:src="@{/css/img/troll.png}"/>
</div>
<div th:if="${reputation} == 0">
    <img th:src="@{/css/img/smeagol.jpg}"/>
</div>
<div th:if="${reputation gt 0} and ${reputation le 5}">
    <img th:src="@{/css/img/samwise.png}"/>
</div>
<div th:if="${reputation gt 5} and ${reputation le 15}">
    <img th:src="@{/css/img/frodo.png}"/>
</div>
<div th:if="${reputation gt 15}">
    <img th:src="@{/css/img/gandalf.jpg}"/>
</div>

此语句总是返回smeagol(声誉为0),尽管此用户的声誉为7:example

修改

我错了,图片显示是一条流氓行:

<!--<img th:src="@{/css/img/smeagol.jpg}"/>-->

但我评论了它。现在没有图像显示。

EDIT2:

改变了我的比较器(见原帖),现在我收到以下错误:

 The value of attribute "th:case" associated with an element type "div" must not contain the '<' character.

EDIT3:

立即投放,将原始帖子更新为工作代码

2 个答案:

答案 0 :(得分:1)

更改

  <div th:case="0">
    <img  th:src="@{/css/img/smeagol.jpg}"/>
  </div>

  <div th:case="${reputation == 0}">
    <img  th:src="@{/css/img/smeagol.jpg}"/>
   </div>

答案 1 :(得分:1)

根据the documentation,Thymeleaf的switch声明就像Java一样 - 而且这个例子暗示了相同的。

换句话说:你做不到

<th:block th:switch="${reputation}">
    <div th:case="${reputation} < 0">
[...]

但需要做

<th:block th:switch="${reputation}">
    <div th:case="0">
[...]

这不是你想要的。

相反,您必须使用th:if,例如:

<div th:if="${reputation} < 0">
    <img  th:src="@{/css/img/troll.png}"/>
</div>