1. 程式人生 > >FreeMarker中<#include>和<#import>標簽的區別

FreeMarker中<#include>和<#import>標簽的區別

str 使用 名稱 clas -m log rect 兩個 arc

在使用freemarker作為前端頁面模板的應用中,會有很多的freemarker模板頁面,這些ftl會在不同的頁面中重復使用,一是為了簡化布局的管理,二是可以重復使用一些代碼。

在freemarker中可以通過以下兩種方式來使用已經存在的模板。他們是<#inclue>和<#import>標簽。

1.<#include> directive

該標簽的作用是將便簽中指定的路徑的ftl文件導入到使用標簽的ftl文件中,包括macro\funtion\variable等所有被引用的ftl內容。被引用的ftl內容會在引用的ftl中重新被渲染最終輸出。一般用於頁面拆分,便於頁面重用,如將header和footer分別抽取出來獨自成模板,這樣在所有返回給前端的page裏都可以include這兩個模板了。

<#include "../../header.ftl"> 將相對路徑中的header.ftl文件加載到當前文件中。如header.ftl中定義了宏、函數等,在當前文件中可以不加命名空間前綴直接使用。如在header.ftl中

定義了<#marco getBranch></macro>,可以在當前文件中直接使用:<@getBranch>...</@getBranch>.

2.<#import> directive

該標簽的字面意義和include差不多,經常會混淆使用。其含義是將標簽中指定的模板中的已定義的宏、函數等導入到當前模板中,並在當前文檔中指定一個變量作為該模板命名空間,以便當前文檔引用。與include的區別是該指令不會講import指定的模板內容渲染到引用的模板的輸出中。

如:<#import ”../../service.ftl as service>.其作用是將service.ftl中的定義的各宏、函數、變量、自定義、設置等內容用指定的命名空間名稱加以引用。但是當前文檔不會將import的模板輸出插入到import標簽的位置。和<#include>標簽一樣可以使用相對路徑和絕對路徑引用外部模板。

如:service.ftl中定義的宏如下:<#macro branchService></#macro>,在當前文檔中可以這樣導入<#import "../../service.ftl" as service> ,service變量作為該文檔中使用service中服務的命名空間,調用時應該這樣:<@service.branchService >....</@service.branchService>.

FreeMarker中<#include>和<#import>標簽的區別