GSP ***** В качестве шаблонов для генерации текста используется формат ``gsp``. Синтаксис совпадает с оригинальным ``gsp`` (Groovy Server Pages) из проекта http://grails.org для обеспечения нормального редактирования в IDE, которые поддерживают ``gsp``. Особенности сгенерированного по шаблону класса: * каждая строка внутри метода совпадает со строкой в шаблоне, что позволяет однозначно идентифицировать место возникновения ошибки в шаблоне (в отличии от оригинального gsp, где нет соответсвия между сгенерированным классом и оригинальным шаблоном) * базовый класс должен реализовывать интерфейс ``jandcode.groovy.IGspTemplate`` Синтаксис ========= Парзер ``gsp`` просто преобразует текст шаблона в текст на ``groovy`` по следующим правилам: * ``ANYTEXT`` преобразуется в ``out('ANYTEXT')`` *(вывести фрагмент текста)* * ``${ANYTEXT}`` преобразуется в ``out(ANYTEXT)`` *(вывести значение выражения)* * ``<%ANYTEXT%>`` преобразуется в ``ANYTEXT`` *(вставить фрагмент groovy-кода)* * ``<%=ANYTEXT%>`` преобразуется в ``out(ANYTEXT)`` *(вывести значение выражения)* * ``<%--ANYTEXT--%>`` преобразуется в ``/*ANYTEXT*/`` *(коментарий)* * ``%{--ANYTEXT--}%`` преобразуется в ``/*ANYTEXT*/`` *(коментарий)* * ```` преобразуется в ``outTag('xx/yy')`` *(вызов функции outTag)* * ```` преобразуется в ``outTag('xx/yy',atr:value,atr2:value)`` *(вызов функции outTag)* * `` body `` преобразуется в ``outTag('xx/yy',atr:value,atr2:value) { body }`` *(вызов функции outTag)* Локальные переменные в шаблоне ============================== Шаблон преобразуется в текст метода groovy. Соотвественно любое определение переменной определяет локальную переменную метода: .. code-block:: jsp <% // локальные переменные метода шаблона String s = "" def a = [] %> Для определения функций внутри шаблона изпользуются ``groovy closure`` (т.к. метод внутри метода объявить нельзя): .. code-block:: jsp <% def pw2 = {a-> return a*a } %> 5^2 = ${pw2(5)}