据我所知,文档中没有提到它,但是 Apache Sling 是一个开源项目,所以我们可以自己查找它。
查看实现细节,目前唯一支持的类型是java.util.Date
andjava.util.Calendar
及其子类。
这是负责在 HTL 中应用所选格式的FormatFilterExtension
类。
让我们看看它执行的检查。
} 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
它又是 extends AbstractRuntimeModel
。
@Override
public boolean isDate(Object target) {
return (target instanceof Date || target instanceof Calendar);
}
所以如果它是 aDate
或 a Calendar
,它将被处理。
即使您像这样强制格式化类型
${'yyyy-MM-dd' @ format=myDate, type='date'} <!--/* Forced formatting type */-->
您传递的对象最终将使用AbstractRuntimeObjectModel#toDate(Object object)
which 返回null
所有不是Date
or实例的对象Calendar
。
由于检查基于instanceof
,这也包括Date
和Calendar
的子类型的实例。LocalDate
但是,它不是其中之一,因此它不起作用也就不足为奇了。