Итак, вы говорите, что вы не хотите удалять "class:"
из имени шаблона, и в соответствии с этим вопросом вы не хотите научить FreeMarker понимать его с помощью пользовательского TemplateLoader
либо.Я имею в виду, если вы запретите это, что еще может решить это?Я могу только посоветовать вам сделать последнее;реализовать пользовательский TemplateLoader
(либо тот, который просто удаляет префикс "class:"
, затем делегирует ClassTemplateLoader
, или, что еще лучше, тот, который просто делегирует Spring ResourceLoader
).Вот как вы настраиваете FreeMarker, чтобы делать то, что вы хотите.Это не что-то экстремальное, нужно реализовать собственный TemplateLoader
.
Обновление: Полезно знать, что по умолчанию есть несоответствие между шаблоном FreeMarkerСинтаксис имени и Синтаксис имени ресурса Spring.В соответствии с синтаксисом Spring вы можете написать "classpath:foo.ftl"
или "classpath:/foo.ftl"
.Но FreeMarker предполагает, что часть схемы всегда заканчивается ://
, а одинокий :
или :/
ничего особенного.Таким образом, все эти пути к ресурсам будут рассматриваться как относительные пути, и поэтому текущий каталог шаблонов будет добавлен перед ними перед фактическим разрешением шаблона.Чтобы решить эту проблему, начиная с FreeMarker 2.3.22, вы можете использовать Configuration.setTemplateNameFormat(TemplateNameFormat.DEFAULT_2_4_0)
(template_name_format=DEFAULT_2_4_0
в Properties
), который рассматривает :
в качестве разделителя схемы.