8

他のすべてのビューページが継承するマスターテンプレートを作成したいと思います。

したがって、マスターテンプレートには次のものがあります。

HEADER
--CONTENT--
FOOTER
  1. ヘッダーには、オプションで(ユーザーがログインしている場合)、ユーザー名およびその他のユーザーオブジェクトのプロパティが表示されます。

  2. --CONTENT--は、他の「継承」ビューページがコンテンツを挿入するプレースホルダーです。

だから私の質問は、これはフリーマーカーで可能ですか?もしそうなら、何かガイダンスはありますか?

コントローラアクションからヘッダーにユーザーオブジェクトを渡すにはどうすればよいですか?理想的には、オブジェクトはすべてのビューページ以外の場所に渡されます(すべてのビューページでこのコードを維持する必要がないようにするため)。

4

4 に答える 4

3

はい、可能です。私たちのアプリケーションでは、ユーザーオブジェクトのようなものがセッションスコープに存在しますが、これはフリーマーカーがアクセスできる任意のスコープである可能性があります。

<#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>
于 2010-07-19T14:58:43.720 に答える
2

Freemarkerテンプレートの継承を作成しました-https ://github.com/kwon37xi/freemarker-template-inheritance それはあなたが望むものだと思います。フリーマーカー2.3.19でテストされています。

于 2013-07-21T16:00:54.620 に答える
0

私は次のようなものを実装しました:

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

于 2019-03-21T11:31:10.367 に答える
0

新しいFreemarkerバージョンでは、<#nested>要素は非常に便利です。

base.ftl:

<#macro layout>
    <html>
    <body>
    <p>OptaPlanner AI</p>
    <#nested>
    </body>
    </html>
</#macro>

baseWithDownloadButton.ftl:

<#import "base.ftl" as base>

<@base.layout>
    ${content.body}<#-- Only applicable for jbake -->
    <p>Download button</p>
</@base.layout>
于 2021-05-07T15:27:21.107 に答える