错误:尝试调用方法"格式" on null context object

时间:2016-10-20 14:31:53

标签: java spring spring-boot thymeleaf date-formatting

Spring-boot v1.4.1
Java v1.8
Thymeleaf 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):方法调用:尝试调用方法   null上下文对象上的format(java.time.LocalDate,java.lang.String)

但是,如果我在没有Thymeleaf格式的情况下运行这行代码,它就会工作,并以默认格式呈现一个LocalDate对象表(&#34; 2016-05-25&#34;)。

问题:为什么我会收到一个&#39; null的上下文对象&#39;错误,这是什么意思?我如何编辑以获得我想要的格式?

2 个答案:

答案 0 :(得分:9)

要使用#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 - for Thymeleaf 2.1(需要Thymeleaf 2.1.3 +)
  •   

我和你一样拥有相同的弹簧靴和百万美元版本并且因为我提供了不合适的附加版本(3.0.0)而收到了同样的错误。将其切换到较低版本修复了问题(在我的情况下在maven pom文件中):

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

答案 1 :(得分:4)

如果您使用springboot和配置作为代码

add:templateEngine.addDialect(new Java8TimeDialect());