FreeMarker 基本语法与简单实例

FreeMarker基本语法与简单实例

参考资料:http://jiangsha.iteye.com/blog/372307

FreeMarker释义

最近在学习Spring Boot时用到FreeMarker动态页面静态化技术,百度百科对FreeMarker的释义:

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

基本语法与实例

if, else, elseif

语法

    <#if condition>  
      ...  
    <#elseif condition2>  
      ...  
    <#elseif condition3>  
      ...  
    ...  
    <#else>  
      ...  
    </#if>  

实例

    <#if x = 1>  
      x is 1  
    </#if>  
    <#if x = 1>  
      x is 1  
    <#else>  
      x is not 1  
    </#if>  

switch, case, default, break

语法

    <#switch value>  
      <#case refValue1>  
             ...  
             <#break>  
      <#case refValue2>  
             ...  
             <#break>  
      ...  
      <#case refValueN>  
             ...  
             <#break>  
      <#default>  
             ...  
    </#switch>  

实例

    <#switch being.size>  
      <#case "small">  
              This will be processed if it is small  
              <#break>  
      <#case "medium">  
              This will be processed if it is medium  
              <#break>  
      <#case "large">  
              This will be processed if it is large  
              <#break>  
      <#default>  
              This will be processed if it is neither  
    </#switch>  

字符串

实例

    <#switch being.size>  
      <#case "small">  
              This will be processed if it is small  
              <#break>  
      <#case "medium">  
              This will be processed if it is medium  
              <#break>  
      <#case "large">  
              This will be processed if it is large  
              <#break>  
      <#default>  
              This will be processed if it is neither  
    </#switch>  

数字

实例

    <#switch x>  
      <#case x = 1>  
             1  
      <#case x = 2>  
             2  
      <#default>  
             d  
    </#switch>  

如果x=1 输出 1 2, x=2 输出 2, x=3 输出d

list, break

语法

    <#list sequence as item>  
    ...  
    <#if item = "spring"><#break></#if>  
    ...  
    </#list>  

关键字
item_index:是list当前值的下标
item_has_next:判断list是否还有值
实例

    <#assign seq = ["winter", "spring", "summer", "autumn"]>  
    <#list seq as x>  
      ${x_index + 1}. ${x}<#if x_has_next>,</#if>  
    </#list>  

输出:
1.winter,
2.spring,
3.summer,
4.autumn

include

语法

<#include filename>  
或
<#include filename options>  

options包含两个属性
encoding=”GBK” 编码格式
parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值
的如parse=true,而不是parse=”true”
实例
/common/copyright.ftl 包含内容

Copyright 2001-2002 ${me}  
All rights reserved.   

模板文件

    <#assign me = "Juila Smith">  
    Some test  
    Yeah  
    <span><strong><span><#include "/common/copyright.ftl" encoding="GBK"></span>  
    </strong>  
    </span>  

输出结果:
Some test
Yeah.
Copyright 2001-2002 Juila Smith
All rights reserved.

Import

语法

<#import path as hash>  

类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件
实例
假设mylib.ftl 里定义了宏copyright 那么我们在其他模板页面里可以这样使用

    <#import "/libs/mylib.ftl" as my>  
    <@my.copyright date="1999-2002"/>  
    <#-- "my"在freemarker里被称作namespace -->  

compress

语法

    <#compress>  
      ...  
    </#compress>  

用来压缩空白空间和空白的行

escape, noescape

语法

    <#escape identifier as expression>  
      ...  
      <#noescape>...</#noescape>  
      ...  
    </#escape>  

实例
主要使用在相似的字符串变量输出,比如某一个模块的所有字符串输出都必须是html安全的,这个时候就可以使用该表达式

    <#escape x as x?html>  
      First name: ${firstName}  
      <#noescape>Last name: ${lastName}</#noescape>  
      Maiden name: ${maidenName}  
    </#escape>  

相同表达式

    First name: ${firstName?html}  
    Last name: ${lastName }  
    Maiden name: ${maidenName?html}  

assign

语法

    <#assign name=value>  
    <#-- 或则 -->  
    <#assign name1=value1 name2=value2 ... nameN=valueN>  
    <#-- 或则 -->  
    <#assign same as above... in namespacehash>  
    <#-- 或则 -->  
    <#assign name>  
      capture this  
    </#assign>   
    <#-- 或则 -->  
    <#assign name in namespacehash>  
      capture this  
    </#assign>  

实例
生成变量,并且给变量赋值
给seasons赋予序列值

    <#assign seasons = ["winter", "spring", "summer", "autumn"]>  

给my namespage 赋予一个变量bgColor,下面可以通过my.bgColor来访问这个变量

    <#import "/mylib.ftl" as my>  
    <#assign bgColor="red" in my>  

将一段输出的文本作为变量保存在x里

    <#assign x>  
      <#list 1..3 as n>  
             ${n} <@myMacro />  
      </#list>  
    </#assign>  
    Number of words: ${x?word_list?size}  
    ${x}  
    <#assign x>Hello ${user}!</#assign>          error  
    <#assign x=" Hello ${user}!">         true  

同时也支持中文赋值,如:

    <#assign 语法>  
      java  
    </#assign>  

    ${语法}  

global

语法

    <#global name=value>  
    <#--或则-->  
    <#global name1=value1 name2=value2 ... nameN=valueN>  
    <#--或则-->  
    <#global name>  
      capture this  
    </#global>  

全局赋值语法,利用这个语法给变量赋值,那么这个变量在所有的namespace [A1] 中是可见的, 如果这个变量被当前的assign 语法覆盖 如<#global x=2> <#assign x=1> 在当前页面里x=2 将被隐藏,或者通过${.global.x} 来访问

setting

语法

<#setting name=value>  

用来设置整个系统的一个环境
locale
number_format
boolean_format
date_format , time_format , datetime_format
time_zone
classic_compatible
实例
假如当前是匈牙利的设置,然后修改成美国

${1.2}  
<#setting locale="en_US">  
${1.2}   

输出
1,2
1.2
因为匈牙利是采用”, “作为十进制的分隔符,美国是用”. ”

macro, nested, return

语法

    <#macro name param1 param2 ... paramN>  
      ...  
      <#nested loopvar1, loopvar2, ..., loopvarN>  
      ...  
      <#return>  
      ...  
    </#macro>  

实例

    <#macro test foo bar="Bar"[A2]  baaz=-1>  
      Test text, and the params: ${foo}, ${bar}, ${baaz}  
    </#macro>  
    <@test foo="a" bar="b" baaz=5*5-2/>  
    <@test foo="a" bar="b"/>  
    <@test foo="a" baaz=5*5-2/>  
    <@test foo="a"/>   

输出
Test text, and the params: a, b, 23
Test text, and the params: a, b, -1
Test text, and the params: a, Bar, 23
Test text, and the params: a, Bar, -1

定义循环输出的宏

    <#macro list title items>  
    ${title?cap_first}:  
            <#list items as x>  
               *${x?cap_first}  
             </#list>  
    </#macro>  
    <@list items=["mouse", "elephant", "python"] title="Animals"/>  

输出结果:
Animals:
*Mouse
*Elephant
*Python
包含body 的宏

    <#macro repeat count>  
      <#list 1..count as x>  
             <#nested x, x/2, x==count>  
      </#list>  
    </#macro>  

    <@repeat count=4 ; c halfc last>  
      ${c}. ${halfc}<#if last> Last!</#if>  
    </@repeat>   

输出
1. 0.5
2. 1
3. 1.5
4. 2 Last!

t, lt, rt

语法

    <#t> 去掉左右空白和回车换行  
    <#lt>去掉左边空白和回车换行  
    <#rt>去掉右边空白和回车换行  
    <#nt>取消上面的效果  

猜你喜欢

转载自blog.csdn.net/lgj123xj/article/details/78943851