在Thymeleaf的th:selected属性中不可靠的行为

时间:2017-03-04 00:42:34

标签: spring spring-boot thymeleaf

我有一个使用Spring Boot和Thymeleaf的项目来渲染html页面。在其中一个页面中,我有以下html让Thymeleaf选择一个选项:

<select name="value" id="usersWarning">
    <option value="0" th:text="#{button.disabled}">0</option>
    <option value="0.5" th:selected="${warning} == 0.5">50%</option>
    <option value="0.75" th:selected="${warning} == 0.75">75%</option>
    <option value="0.9" th:selected="${warning} == 0.9">90%</option>
    <option value="0.95" th:selected="${warning} == 0.95">95%</option>
</select>

如果警告等于0.5或0.75,Thymeleaf按预期工作,但如果警告等于0.9或0.95,则Thymeleaf不会将selected属性添加到该选项。我添加了以下选项以查看我的警告值是否错误:

<option th:text="${warning}"></option>

但在每种情况下,Thymeleaf都能正确显示0.9或0.95。

感谢您的帮助。这让我在最后一小时疯狂。

1 个答案:

答案 0 :(得分:1)

我建议尝试

${#numbers.formatDecimal(warning, 0, 2) == '0.95'}

这应该将数字格式化为带有两位小数的字符串,允许您对结果执行字符串比较。

这可能是必要的,因为浮点比较可能会有非常小的舍入错误,导致严格的比较失败。格式化为字符串会将数字四舍五入到更少的小数位,并消除可能导致比较失败的小错误。