SpringBoot+Thymeleaf模板值比较问题:下拉框选中状态异常
解决Thymeleaf语言选择下拉框默认选中异常问题
问题原因
Thymeleaf中的#locale是Locale类的实例对象,并非直接的字符串类型。直接用${#locale == 'es'}这种对象与字符串的比较逻辑永远不成立,导致th:selected属性无法正确触发,浏览器会默认选中第一个选项。
修复方案
通过Locale对象的language属性获取两位语言代码(如es、en),再与选项值做字符串比较:
修正后的代码
<div th:text="${#locale}"></div> <div class="language-picker js-language-picker"> <form action="" class="language-picker__form"> <select th:id="language-picker-select" name="language-picker-select"> <option th:value="es" th:selected="${#locale.language == 'es'}">Español</option> <option th:value="fr" th:selected="${#locale.language == 'fr'}">Français</option> <option th:value="pt" th:selected="${#locale.language == 'pt'}">Português</option> <option th:value="en" th:selected="${#locale.language == 'en'}">English</option> </select> </form> </div>
补充说明
- 如果使用后台传入的
${locale}对象,同样需要用locale.language获取语言代码,判断逻辑改为${locale.language == 'es'} - 需检查选项的
th:selected表达式是否存在笔误(比如你最初代码中English选项误写为${#locale=='pt'},这类低级错误也会导致选中异常)
内容的提问来源于stack exchange,提问作者Nunyet Calçada
相关产品推荐
相关产品推荐

