java之自从更改 SpringBoot 依赖性以来,在空字段上加入时出现 Freemarker 错误

kevingrace 阅读:48 2023-09-06 19:40:43 评论:0

已解决:错误已经存在,我只是假设我最近创建了它...


我有一个使用 SpringMVC 和 Freemarker 的项目。
在我的 Controller 中,我向名为 activities 的模型添加了一个属性,如下所示:

@GetMapping("/activities/{floorId}") 
public String activities(Model model, @PathVariable String floorId) { 
    model.addAttribute("activities", activityService.getActivitiesForFloor(floorId)); 
    return "floor/activities"; 
} 

activities 有一个名为 involvedTiles 的字段,该字段有时为 null。这很好。
在我的 Freemarker View 中,我像这样使用模型属性:

<#list activities as activity> 
<tr> 
    <td>${activity.id}</td> 
    <td>${activity.involvedTiles?join(", ")}</td> 
</tr> 
</#list> 

这一直有效(从未出错)。但是现在我突然得到这个错误:

2016-10-21 13:56:17,163 ERROR [http-nio-8080-exec-10] o.a.c.c.C.[.[.[.[dispatcherServlet] [DirectJDKLog.java:181] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: 
==> activity.involvedTiles  [in template "floor/activities.ftl" at line 51, column 27] 
 
---- 
Tip: It's the step after the last dot that caused this error, not those before it. 
---- 
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present#deleted-channelwhen-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? 
---- 
...etc... 

我知道我收到了这个错误,因为 activity.involvedTilesnull 并且我尝试将它与 ?join() 功能。但我不明白为什么这突然停止工作。我唯一能想到的是我已经将我的 SpringBoot 依赖项从 1.3.0.RELEASE 更新到 1.4.1.RELEASE。在 SpringBoot 1.3.0 中,他们使用 org.freemarker 2.3.23在 SpringBoot 1.4.1 中,他们使用 org.freemarker 2.3.25-incubating .
我的问题:Freemarker 是否更改了某些内容,这就是我收到此错误的原因吗?


我检查了 site of freemarker 2.3.23freemarker 2.3.25但找不到解释此错误的内容。

请您参考如下方法:

?join 从未打算容忍 null,而且据我所知也没有这样的错误(意外地允许 null)知道。另外,我已经用 FreeMarker 2.3.21(一个非常旧的版本)尝试过这个,它仍然不允许那里有 null


标签:Spring Boot
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号