советы по созданию шаблонов freemarker, хотите создать мастер шаблон - PullRequest
6 голосов
/ 19 июля 2010

Я хочу создать главный шаблон, который будет наследовать каждая другая страница просмотра.

Таким образом, главный шаблон будет иметь:

HEADER
--CONTENT--
FOOTER
  1. заголовок будет необязательноshow (если пользователь вошел в систему), имя пользователя и другие свойства объекта пользователя.

  2. --CONTENT-- - это заполнитель, который другие «наследующие» страницы представления будут вставлять в свое содержимоев.

Итак, мои вопросы, возможно ли это с freemarker?Если да, то какие-либо рекомендации?

Как бы я передал объект пользователя в заголовок из действий моего контроллера?в идеале объект должен передаваться куда-то ДРУГОЕ, чем каждая страница просмотра (чтобы избежать необходимости поддерживать этот код на каждой странице просмотра).

Ответы [ 3 ]

3 голосов
/ 19 июля 2010

Да, это возможно.В наших приложениях такие вещи, как пользовательский объект, существуют в области видимости сеанса, но это может быть любая область, к которой freemarker имеет доступ:

<#if Session.the_user?? && Session.the_user.loggedIn>
    <#-- header code -->
</#if> 

Вы можете опустить Session., и Freemarker будет искать в различных областях для заданногоимя переменной.

Чтобы добавить содержимое, включите его в тот пункт главного шаблона, куда вы хотите, чтобы страница просмотра поместила его содержимое:

<#nested>

Затем страницы просмотра объявляютони используют мастер-шаблон следующим образом:

<#import "/WEB-INF/ftl/path/to/template/master.ftl" as com>
<@com.template>
    View page content
</@com.template>
1 голос
/ 21 июля 2013

Я сделал наследование шаблона Freemarker - https://github.com/kwon37xi/freemarker-template-inheritance Я думаю, это то, что вы хотите. Протестировано на freemarker 2.3.19.

0 голосов
/ 21 марта 2019

Я реализовал что-то вроде этого:

base.ftl

<#macro page_head>
  <title>Page title!</title>
</#macro>

<#macro page_body></#macro>

<#macro display_page>
  <!DOCTYPE html>
  <html lang="en">
  <head>
    <@page_head/>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <@page_body/>
  </body>
  </html>
</#macro>

, тогда index.ftl унаследует шаблоны шаблонов как:

<#include "base.ftl">
<#macro page_head>
  <title>Welcome studs!</title>
</#macro>

<#macro page_body>
    <h1> Welcome user</h1>
</#macro>
<@display_page/>

этот сайт был полезен для ссылки на код https://nickfun.github.io/posts/2014/freemarker-template-inheritance.html

...