FreeMarker - это шаблонизатор, используемый совместо с языком программирования Java.
Пользоваться им достаточно просто. В нём используются объекты, добавленные в него через метод контроллера, вызвавшего собственно ftl шаблон. Да, кстати, шаблоны имеют раширение ftl.
Например ваш метод с именем renderPage использует шаблон с именем mypage.ftl
Для этого пишем в контроллере:
ModelAndView mav = request.getAttribute("mav");
mav.setViewName("mypage");
Готово, теперь при обращение к методу renderPage будет вызван шаблон mypage.ftl
В начале шаблона должно стоять
[#ftl]
Далее можно писать всё что угодно. Для начала добавим в шаблон какой-нибудь объект, например строку.
Пишем в методе:
mav.addObject("name", "Developer name");
Теперь в шаблоне есть фримаркеровская переменная с именем name и значением Developer name. Выведем её:
Готово.
Аналогично можно передать массив:
mav.addObject("indexes",[1,4,5,2,12,41]);
И в шаблоне написать такую конструкцию:
[#assign count=indexes?size]
[#list 0..count-1 as i]
${indexes[i]}<br />
[/#list]
Значения нашего массива будут выведены в столбик.
Если у вас хэш мап, то аналогично функцией list можно перебрать и его,вот так:
[#assign keys = hash?keys]
[#list keys as key]
[/#list]
Где hash - собственно сам хэш мап.
Обратите внимание,что при обходе хэш мапа, в цикле не поисходит приравнивания двух переменных.как может показаться на первый взгляд.Знак равенства-это чистый html. Всё что относится к FreeMarker - находится внутри {} или [].
Для обращения к методам следует использовать знак вопроса.
Например для превращения массива в строку напишем так:
[#assign str=array?split()]
Да, конструкцией
assign вы будете задавать и переопределять значения переменных. Переменные, созданные таким образом будут глобальными. Локальные, как вы наверняка знаете, нужны для функций.
FreeMarker предусматривает функции и макросы. В чём разница-честно, незнаю...
Напишем простой макрос,который выведет наше имя и возраст.
[#macro my_macros name age]
Вас зовут ${name} и вам всего-то ${age} лет.
[#macro]
Готово. Вызов макроса будет происходить так:
[@my_macros "Вася" 15][/@]
Грамотный программист поместит десятки своих макросов в отдельный файл, и правильно сделает. Во FreeMarker`е есть функции
include и
import. Работают они несколько по разному. предположим у нас есть файл macroses.ftl , содержащий в себе макросы.И его мы будем импортить в наш mypage.ftl . Напишем:
[#import "macroses.ftl" as macs]
И далее дернем из него макрос my_macros:
[@macs.my_macros "Отец Фёдор" 2012][/@]
Всё просто.
Да,если вы проверите такой код, то заметите, что число 2012 отобразилось как 2 012. Кашерно? Иногда да,а иногда и нет. Если вам не нужна вся эта радость, то при отображении числовой переменной age используйте
метод c.
То есть
[#macro my_macros name age]
Вас зовут ${name} и вам всего-то ${age?c} лет.
[#macro]
Теперь числа будут без пробелов.
Условия.
Автоматическое преобразование типов тут не хляет..
Такой код вызовет ошибку:
[#assign ok="any string"]
[#if ok]
Привели к true.
[/#if]
Тут или
, или
Два вопросительных знака
приведут переменную к булевскому типу. А если по условию на существование переменной вы хотите её же и вывести, то очевидную конструкцию типа:
[#if my_var??]
${my_var}
[/#if]
Можно записать как:
Круто.
Ещё одна простая конструкция. По булевской переменной вывести либо одно слово, либо другое:
[#assign any_boolean=true]
${any_boolean?string("Всё ок", "Ещё не готово")}
Ну и напоследок проверка нахождения переменной в массиве.
[#assign colors = ["black", "red", "green", "silver", "gold"]]
My gold: ${colors?seq_contains("gold")?string("is realy", "no-no-no...")}
Выведет "My gold: is realy"
Вот собственно краткая справка. если интересно что-то ещё - пишите в комментариях, постараюсь помочь.