FreeMarker 详解

简介

  • 轻量级模版引擎,不需要Servlet环境就可以很轻松的嵌入到应用程序中
  • 能生成各种文本,如html,xml,java,等
  • 入门简单,它是用java编写的,很多语法和java相似

模板文件

  • 文本直接输出
  • 注释即<#--...-->, 不会被输出
  • 插值即$或者#, 将使用数据模型的部分替代后输出
  • FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。
<html> 
<body>  
<#-- 注释部分 -->
<br>  
<#-- 下面使用插值 -->  
<h1>Welcome ${user} !</h1>
<p>We have these animals:
<u1>
<#-- 使用FTL指令 -->  
<#list animals as being>
  <li>${being.name} </li>
<#list>
<u1>
</body>
</html>

FTL 指令

list

<#list nameList as names>    
  ${names}   
</#list>

@

调用方法

@user_def_dir_exp param1=val1 param2=val2 ... paramN=valN/> (xml风格)
<@user_def_dir_exp param1=val1 param2=val2 ... paramN=valN ;lv1, lv2, ..., lvN/>  (包含循环变量)
<@user_def_dir_exp ...>...</@user_def_dir_exp>(使用结束标签1)
<@user_def_dir_exp ...>...</@>(使用结束标签2)
  • user_def_dir_exp:表达式或者是自定义指令(比如宏),将会被调用。
  • param1,param2 等:参数的名称。
  • val1,val2 等:参数的值,它们是表达式。
  • lv1,lv2 等:循环变量的名称,它们不是表达式

调用参数宏

<@list items=["mouse", "elephant", "python"] title="Animals"/>



...


<#macro list title items>
<p>${title?cap_first}:
<ul>
<#list items as x>
<li>${x?cap_first}
</#list>
</ul>
</#macro>

include import

lib/my_test.ftl 模板内容如下:

<#macto copyright date>
  <p>Copyright (C)${date}Julia Smith.All rights reserved.</p>
</#macro>
<#assign mail = "jsmith@acme.com">

假设想在aWebPage.ftl 中使用这个模板

<#include "/lib/my_test.ftl">

会在主命名空间中创建两个变量. 如果再引入同名的变量时就会被后引入的或者新定义的覆盖.这样就不是很好,因为只想让它们在"My Test Library"命名空间中.就需要用 import代替include了

<#import "lib/my_test.ftl" as my>

它会为lib/my_test.ftl创建一个新的哈希表变量,就是空的命名空间my,如果在主命名空间有一个变量,名为mail 或者 copyright,就不会引起混乱,因为两个模板使用了不同的命名空间.

如果 在lib/my_test.ftl 中修改 copyright 如下:

<#macro copyright date>   <p>Copyright (C) ${date} Julia Smith. All rights reserved.   <br>Email: ${mail}</p> </#macro>

然后修改aWebPage,ftl中的内容如下

<#import "/lib/my_test.ftl" as my> <#assign mail="fred@acme.com"> <@my.copyright date="1999-2002"/> ${my.mail} ${mail}

则输出

<p>Copyright (C) 1999-2002 Julia Smith.All rights reserved.
  <br>Email :jsmith@acme.com
</p>
jsmith@acme.com
fred@acme.com

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×