You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf模板中获取Locale时SpringEL表达式报错问题

解决Thymeleaf中Locale比较的报错问题

错误原因分析

你当前的代码存在两个核心问题引发报错:

  1. 类型不匹配:LocaleContextHolder.getLocale()返回的是Locale对象,直接用==和字符串(如'es')做相等判断,Spring EL无法处理不同类型的比较逻辑,因此抛出表达式解析异常。
  2. 表达式笔误:最后一个English选项的th:selected表达式错误地写为${LocaleContextHolder.getLocale()=='pt'},应当对应'en'。

另外,直接在模板中调用LocaleContextHolder并非Thymeleaf的最佳实践,框架提供了更便捷的内置对象可直接使用。

修复后的代码

使用Thymeleaf内置的#locale对象获取当前Locale,调用getLanguage()方法得到语言代码后再与目标字符串比较:

<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>

补充说明

  • #locale是Thymeleaf提供的内置上下文对象,直接指向当前请求的Locale,无需手动调用Spring的LocaleContextHolder,更符合模板简洁性要求。
  • 如果需要匹配包含国家代码的完整Locale(如es-ES),可以使用#locale.toString()获取完整Locale字符串进行比较。

内容的提问来源于stack exchange,提问作者Nunyet Calçada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:19:59