Насколько я могу судить, в документации это не упоминается, но Apache Sling - это проект с открытым исходным кодом, поэтому мы можем посмотреть его самостоятельно.
Рассмотрим детали реализации, единственные поддерживаемые типы, такие какНа данный момент java.util.Date
и java.util.Calendar
и их подклассы.
Вот FormatFilterExtension
класс , отвечающий за применение выбранного формата в 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);
}
, так что еслиэто Date
или Calendar
, он будет обработан.
Даже если вы введете такой тип форматирования, как этот
${'yyyy-MM-dd' @ format=myDate, type='date'} <!--/* Forced formatting type */-->
, объект, который вы передадите, будет обработан с использованиемAbstractRuntimeObjectModel#toDate(Object object)
, который возвращает null
для всех объектов, которые не являются экземплярами Date
или Calendar
.
Поскольку проверка основана на instanceof
, это также включаетэкземпляры подтипов Date
и Calendar
.LocalDate
, однако, не является одним из них, поэтому неудивительно, что это не сработало.