【问题标题】:How to use Dates.Format with locale in Thymeleaf如何在 Thymeleaf 中使用 Dates.Format 和语言环境
【发布时间】:2019-03-19 16:12:17
【问题描述】:

我正在尝试在 Thymeleaf 中使用语言环境格式化日期,我已经使用了 dates.format

<td th:text="${#dates.format(embargo.fecha, 'dd-MMMM-yyyy', new Locale('es'))}"></td>

<td th:text="${#dates.format(embargo.fecha, 'dd-MMMM-yyyy',${ new Locale('es')})}"></td>

但以上都不起作用。

我是基于这个已经解决的问题 https://github.com/thymeleaf/thymeleaf-extras-java8time/pull/6

【问题讨论】:

    标签: java spring spring-boot thymeleaf


    【解决方案1】:

    我偶然发现了和你一样的问题。

    不起作用的原因是您需要使用#temporals 而不是#dates

    为此,您需要将 thymeleaf-extras-java8time 依赖项添加到您的项目中:

    compile("org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE")
    

    请记住,Locale 功能是在 2.1.0 版发布之后添加的,因此您必须使用 Thymeleaf 3。添加:

    compile("org.thymeleaf:thymeleaf-spring4:3.0.6.RELEASE")
    compile("org.thymeleaf:thymeleaf:3.0.6.RELEASE")
    compile("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.2.2")
    

    正如@Andreas 指出的,你需要指定整个包名,例如:

    <td th:text="${#temporals.format(embargo.fecha, 'dd-MMMM-yyyy', new java.util.Locale('es', 'ES'))}"></td>
    

    还要注意#temporals 不适用于 java.util.Dates,但它们适用于 java.time.LocalDatejava.time。本地日期时间

    如果您无法将后端更改为使用 java.time.LocalDate,则解决方案是使用静态方法从您 java.util.Date 创建它of(year, month, day) 来自 LocalDate 类。

    例如:

    T(java.time.LocalDate).of(#dates.year(embargo.fecha), #dates.month(embargo.fecha), #dates.day(embargo.fecha))
    

    把它放在你的例子中,它会变成:

    <td th:text="${#temporals.format(T(java.time.LocalDate).of(#dates.year(embargo.fecha), #dates.month(embargo.fecha), #dates.day(embargo.fecha)), 'dd-MMMM-yyyy', new java.util.Locale('es', 'ES'))}"></td>
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      由于您在 Spring Boot 中使用 Thymeleaf,因此表达式为 SpEL(Spring 表达式语言),documentation 表示:

      您可以使用new 运算符调用构造函数。除了基本类型(intfloat 等)和 String 之外,您应该使用完全限定的类名

      因此,您需要使用new java.util.Locale('es') 而不仅仅是new Locale('es')

      【讨论】:

      • 我正在使用下一个表达式,但它仍然不起作用 #dates.format(embargo.fecha, 'dd-MMMM-yyyy', new java.util.Locale('es'))需要进口吗?
      • @JulianSolarte 你只是说它不起作用。也许您应该编辑问题并解释 如何 它不起作用,例如如果是因为抛出异常,则显示完整的堆栈跟踪。
      • @Andreas 你确定这些表达式是 SpEL 吗?当我使用无效表达式时,异常会提到无法解析 OGNL 表达式。而且我绝对可以成功使用OGNL语法,比如使用@java.util.Locale@ENGLISH来使用预定义的常量Locale。
      猜你喜欢
      • 2016-09-05
      • 2017-04-11
      • 2019-10-25
      • 2021-01-15
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多