私は、SpringブートMVCとThymeleafを使ってHTMLページをレンダリングするプロジェクトを持っています。ページの一つで、私は、オプションを選択Thymeleaf持つように次のHTMLを持っている: "警告が0.5または0.75と等しいが、警告が0.9または0.95に等しい場合、Thymeleafは追加されない場合Thymeleafのth:selected属性の信頼性の低い動作
<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>
Thymeleafは期待通りに動作します選択された "属性をそのオプションに追加する。
<option th:text="${warning}"></option>
が、それぞれの場合にThymeleafが0.9または0.95を正しく示しています。私は私の警告値が間違っているかどうかを確認するために、次のオプションを追加しました。
ありがとうございました。これは私に最後の1時間を夢中にさせてくれました。
おそらく浮動小数点比較の丸め誤差のためです。警告の値を2桁に丸めて文字列として比較したり、式でApache Commons Precision.compareTo()を使用できるかどうかを調べることができます。 – Kylos
@Kylosご提案いただきありがとうございます。あなたは正しいですが、私はvalue.compareTo(警告)== 0を代わりに使って修正しました。 –