Обработка нескольких вложенных шаблонов с использованием freemarker (или любого другого механизма шаблонов) - PullRequest
0 голосов
/ 24 сентября 2011

Я пытаюсь использовать FreeMarker для написания сложной веб-страницы с использованием сервлетов.

Страница состоит из 3 основных компонентов: навигационная панель сверху, рекламная панель слева и основной раздел контента всредний.У меня есть отдельный сервлет, чтобы нарисовать каждый из них.Каждый сервлет просто генерирует раздел html5 и может использовать или не использовать freemarker.

Все вышеперечисленное происходит внутри главной веб-страницы, которая шаблонируется с помощью freemarker.

Проблема заключается в следующем,Шаблон главной страницы выглядит примерно так (полосатые лоты для простоты):

<html>
  <body>
     <!--lots of stuff in between-->

     <section-nav> <!--this should be filled by output of NavServlet.respond -->

     <!--lots of stuff in between-->

     <section-content> <!-- this comes from arbitrary servlet for actual content -->

     <section-advertise> <!--this should be filled by output of AdvertiseServlet --> 

   </body>
</html

Как работать с вышеуказанной структурой с помощью FreeMarker?Если я сделаю template.process () для главной страницы, он напишет и начальный, и конечный тег html, но я хочу, чтобы другие сервлеты (навигация, реклама и т. Д.) Имели возможность создавать контент до конечного тега html.

Если мы не можем использовать FreeMarker для этого, я мог бы использовать и другие шаблонные решения.

1 Ответ

2 голосов
/ 24 сентября 2011

Вы должны реализовать TemplateDirectiveModel для создания пользовательской директивы в Java (в отличие от FTL, т.е. с #macro).Когда вызывается из шаблона (что-то вроде <@my.embed source="thisAndThatServlet" />), он получает Writer, и вы пишете в него все, что хотите.Таким образом, конечно, вы можете включать другие сервлеты или делать все, что выполнимо в Java.(Поддерживаются вложенные Template.process вызовы.) См., Например, исходный код freemarker.ext.servlet.IncludePage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...