gpt4 book ai didi

AEM HTL/Sightly 日期格式化程序所需的日期类型

转载 作者:行者123 更新时间:2023-12-01 19:23:40 24 4
gpt4 key购买 nike

我发现自 AEM 6.3 以来,标记本身就支持日期格式,如下所示:

${ 'dd~MMMM-yyyy' @ format=currentPage.jcr:created }

(引用:https://github.com/adobe/htl-spec/blob/master/SPECIFICATION.md#1222-dates)

我尝试使用 jcr:created 属性以及来自 java.util.Date 后端的数据来使用此格式化程序。

我的问题是,是否支持其他日期类型?就像说,java.time.LocalDate?它没有显示在我的测试页面上,尽管我不确定我是否只是缺少一些需要在 HTL 标记上指示的附加属性?

最佳答案

据我所知,文档中没有提及,但 Apache Sling 是一个开源项目,因此我们可以自己查找。

查看实现细节,目前唯一支持的类型是 java.util.Datejava.util.Calendar 及其子类。

这是FormatFilterExtension class负责在 HTL 中应用所选格式。

让我们看看它执行的检查。

 } else if (DATE_FORMAT_TYPE.equals(formattingType) || (!hasPlaceHolders && runtimeObjectModel.isDate(formatObject))) {
Locale locale = getLocale(runtimeObjectModel, options);
TimeZone timezone = getTimezone(runtimeObjectModel, options);
return formatDate(source, runtimeObjectModel.toDate(formatObject), locale, timezone);
}

它使用runtimeObjectModel.isDate()来验证我们是否正在处理日期。如果我们查看 runtimeObjectModel,我们可以看到它是 SlingRuntimeObjectModel 的实例。这又延伸了 AbstractRuntimeModel .

@Override
public boolean isDate(Object target) {
return (target instanceof Date || target instanceof Calendar);
}

因此,如果它是日期日历,它将被处理。

即使你像这样强制格式化类型

${'yyyy-MM-dd' @ format=myDate, type='date'} <!--/* Forced formatting type */-->

您传递的对象最终将使用 AbstractRuntimeObjectModel#toDate(Object object) 进行处理对于不是 DateCalendar 实例的所有对象,它返回 null

由于检查基于 instanceof,因此这还包括 DateCalendar 子类型的实例。 LocalDate然而,它不是其中之一,因此它不起作用也就不足为奇了。

关于AEM HTL/Sightly 日期格式化程序所需的日期类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54511366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com