错误:试图在空上下文对象上调用方法“格式”

Posted

技术标签:

【中文标题】错误:试图在空上下文对象上调用方法“格式”【英文标题】:Error: Attempted to call method "format" on null context object 【发布时间】:2017-03-02 15:02:44 【问题描述】:

Spring-boot v1.4.1Java v1.8Thymeleaf v2.1.5.

我认为下面这行代码:

<td th:each = "sprint : $sprints" th:text = "$sprint.releaseDate ? $#temporals.format(sprint.releaseDate, 'MMM/dd/yyyy')"></td>

我基于 S.O. 的语法。问题SpringBoot Thymeleaf Ordinal Numbers, 产生错误:

org.springframework.expression.spel.SpelEvaluationException: EL1011E:(pos 11): Method call: 试图调用方法 空上下文对象上的格式(java.time.LocalDate,java.lang.String)

但是,如果我在没有 Thymeleaf 格式的情况下运行这行代码,它可以工作并以默认格式(“2016-05-25”)呈现 LocalDate 对象表。

问题:为什么会出现“空上下文对象”错误,这是什么意思?以及如何编辑以获得我想要的格式?

【问题讨论】:

#temporals 似乎与 thymeleaf-extras-java8time 相关,是否包含在 Spring Boot 配置中?如果不是,您将收到错误消息,因为 #temporals 解析为 null 并且它正在尝试在 null 对象上运行 .format。 看起来我正在运行 v2.1.5,我需要 v3 来运行 extras 模块。 github.com/thymeleaf/thymeleaf-extras-java8time Thymeleaf 2.1 有一个 2.1.0.RELEASE 版本(需要 2.1.3+) 【参考方案1】:

如果你使用springboot和配置为代码

添加:templateEngine.addDialect(new Java8TimeDialect());

【讨论】:

了解这一点很有用【参考方案2】:

要使用#temporals 对象,您需要在项目中包含thymeleaf-extras-java8time 模块。 Here 是 extras 模块的 GitHub 页面。

此模块添加了一个 #temporals 对象,类似于标准方言中的 #dates#calendars 对象,允许从 Thymeleaf 模板格式化和创建临时对象。

在 Spring Boot 1.4.1 版本中,只需要包含 extras 模块,自动配置将为您设置它。确保您提供了正确的版本,具体取决于您的 Thymeleaf 版本:

版本 3.0.0.RELEASE - 适用于 Thymeleaf 3.0(需要 Thymeleaf 3.0.0+) 版本 2.1.0.RELEASE - 适用于 Thymeleaf 2.1(需要 Thymeleaf 2.1.3+)

我有和你一样的 spring boot 和 thymeleaf 版本,并且收到了同样的错误,只是因为我提供了不合适的 extras 版本 (3.0.0)。将其切换到较低版本解决了问题(在我的情况下,在 maven pom 文件中):

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

【讨论】:

以上是关于错误:试图在空上下文对象上调用方法“格式”的主要内容,如果未能解决你的问题,请参考以下文章

在此上下文中无法调用监视窗口中的方法评估

09-面向对象2

09-面向对象2

尝试在空对象引用上调用虚方法Spinner.setAdapter(SpinnerAdapter)[duplicate]

错误:无法在初始化之前调用自动完成的方法;试图调用方法“销毁”

Laravel Request::all() 不应该被静态调用