【发布时间】:2020-06-30 08:49:01
【问题描述】:
我在尝试使用 Freemarker 模板以所需格式显示日期时遇到了一些问题。
我将带有日期信息的点存储在 PostGIS 数据库中,该数据库是通过 FME 进程以 ISO 格式 (%Y-%m-%d) 编写的,以便在具有 GeoServer 的启用时间的 WMS 中使用它们。
调用 GetFeatureInfo 时,日期显示为以下格式 10/4/12 12:00 AM,此处应为 2012-10-04。我们已经将服务器设置更改为 -Dorg.geotools.localDateTimeHandling=true -Duser.country=DE -Duser.timezone=GMT -Duser.language=de。
由于这没有给出预期的结果,我们使用 Freemarker 模板进行了尝试。这个想法是检查日期格式的属性并相应地格式化它们。不知何故,我无法让它工作。我试过这个:
<#if attribute.is_unknown_date_like>
${attribute.value?string("YYYY-MM-DD")}
<#else>
${attribute.value}
</#if>
我收到一条关于条件开始的行的错误消息:
freemarker.core.ParseException
我怎样才能使这个条件语句起作用?
【问题讨论】:
-
错误信息的其余部分是什么?它包含问题所在。另外,
freemarker.core.ParseException表示模板在语法上是错误的,因此它与日期格式无关。你展示的片段也没有这样的问题,所以原因在别处,或者你没有粘贴实际的片段。 -
也就是说,片段确实还有其他问题(比如你应该使用
attribute?is_date_like,带有?),但首先让我们摆脱解析异常。 -
@ddekany - 我发布了我添加到 Freemarker 模板的片段,无需此添加即可工作。所以原因必须在这个片段中。你是对的,我应该使用
attribute?is_data_like和?,因为它是内置的。有了这个,错误消息变得更加重要。请参阅答案下方的评论。 -
您使用的 FreeMarker 版本是否可能低于 2.3.21?那是添加
is_date_like的时候。试试${.version}。那你真的需要升级了。 -
你得到
attribute.value作为字符串吗?我相信它是java.util.Date,但您最近的“答案”表明它只是一个字符串。那么你就不需要?is_date_like,因为无论如何它总是false。
标签: date datetime freemarker geoserver getfeatureinfo