【问题标题】:Date type required in AEM HTL / Sightly date formatterAEM HTL / Sightly 日期格式化程序所需的日期类型
【发布时间】:2019-06-27 21:52:54
【问题描述】:

我已经看到,自 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 标记上指示的附加属性?

【问题讨论】:

    标签: date format aem sightly htl


    【解决方案1】:

    据我所知,文档中没有提到它,但 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);
    }
    

    所以如果是DateCalendar,就会被处理。

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

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

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

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

    【讨论】:

    • 我明白了。感谢您指出这一点的帮助!但是,这是否意味着我们可以建议 Adob​​e 将其视为错误或改进?除非允许日期格式化的功能是专门为仅存储在 JCR 中的日期设计的(不是 LocalDate 类型)?
    • @ionmarx HTL 是 Apache Sling 的一部分,因此如果您有改进的想法,可以在 Sling Jira 中提出请求。
    • 它最终在 Sling 中实现,您必须升级 AEM 上的 HTL 包。这是您想咨询 Adob​​e。
    • @ionmarx:toniedzwiedz 是对的,您可以提出对 Sling 的改进,也可以向 Adob​​e 提出问题,以便将其包含在 AEM 中(通过 SP)
    • 好的!感谢您的小费!如果对他们有意义,也会考虑提高票证! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2017-04-29
    相关资源
    最近更新 更多