Есть ли у Freemarker что-то похожее на toolbox.xml-файл Velocity? - PullRequest
1 голос
/ 10 января 2012

У меня есть приложение Struts 1, которое работает с Velocity в качестве языка шаблонов. Я заменим Velocity на Freemarker и ищу что-то похожее на 'toolbox.xml'-File из VelocityViewServlet. (там вы можете сопоставить имена с классами Java и, используя эти имена, можно получить доступ к методам и переменным различных классов Java в шаблоне Velocity). Кто-нибудь знает, что возможно с Freemarker вместо этого? Пока я нашел только информацию о бобах формы ... был бы рад, если кто-то может помочь ....

1 Ответ

1 голос
/ 10 января 2012

Для служебных функций и макросов, связанных с View (а не с Model), стандартная практика заключается в том, чтобы внедрить их в FreeMarker и поместить в один или несколько шаблонов и #import (или #include). Также возможно вставить TemplateDirectiveModel -s и TemplateMethodModelEx -es (они похожи на макросы и функции, но они реализованы в Java) в шаблон, который вы # import / # inlcude обозначите как <#assign foo = 'com.example.Foo'?new()>.

При вызове простых статических методов Java вы можете использовать ObjectWrapper getStaticModels() (при условии, что это подкласс BeansWrapper), а затем получить необходимые методы как TemplateMethodModelEx -es с staticModels.get("com.example.MyStatics"). Теперь, когда они у вас есть, вы можете поместить их в модель данных (контекст Velocity) в Controller или выбрать методы из них в шаблоне # import-ed и т. Д. Конечно, вы также можете помещать объекты POJO в данные -модели, чтобы вы могли вызывать их нестатические методы.

Третий метод, который мало чем отличается от помещения вещей в модель данных, - это использование «общих переменных», которые являются переменными (возможно, включая TemplateMethodModelEx -es и TemplateDirectiveModel -s), определенными в Configuration уровень.

...