freemark 语法与示例

1、if,else, elseif

语法:

<#ifcondition>

...

<#elseifcondition2>

...

<#elseifcondition3>

...

...

<#else>

...

</#if>

备注:condition、condition2···必须为boolean 类型,<#elseif··>、<#else>可有0或多个。

实例:

<#if x == 1>

x is 1

<#elseifx == 2>

x is 2

<#elseifx == 3>

x is 3

<#elseifx &gt 4>

x is 4

<#else>

x is not 1 nor2 nor 3 nor 4

</#if>

备注:< 或 > 号 必须转义,否则出错。。转义请参考其他文档。

2、switch,case, default, break

语法

<#switchvalue>

<#case refValue1>

...

<#break>

<#case refValue2>

...

<#break>

...

<#case refValueN>

...

<#break>

<#default>

...

</#switch>

备注:该指令官方不推荐使用了,可以用if, else, elseif 指令代替。

3、list,break

语法

<#listsequence as item>

...

</#list>

备注: sequence 为一个sequence 或者 collection 类型。item 为 循环的变量。该指令中包含有两个特殊的循环变量,

item_index:该值为当前循环的值。 item_has_next:该值为一个boolean类型,表明该循环是否含有下一个(是否为循环到了最后一个)

实例:

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

<#list seq as x>

${x_index + 1}. ${x}<#ifx_has_next>,</#if>

</#list>

输出:

1. winter,

2. spring,

3. summer,

4. autumn

实例:

<#assign x=3>

<#list 1..x as i>

${i}

</#list>

备注:当x 为一个数值序列时,可以使用该list 列出两个数值之间的值。(适合于表格的序号填写)

实例:

<#list seq as x>

${x}

<#if x = "spring"><#break></#if>

</#list>

备注:可以用<#if···><#break> 来终止该循环。

4、include

语法

<#include path>

或者

<#include path options>

备注:

path: 为包含一个文件的路径或者是一个输出为String 类型的表达式。

options: 一个或多个的参数: encoding=encoding, parse=parse

encoding: 包含文件解析的编码,如GBK、utf-8等

parse: 为一个boolean 类型值,true为用ftl解析,false为当作text文件解析(also accepts a few string values for backward compatibility)

实例:

/common/copyright.ftl内容:

Copyright2001-2002 ${me}<br>

Allrights reserved.

主体内容:

<#assignme = "Juila Smith">

<h1>Sometest</h1>

<p>Yeah.

<hr>

<#include"/common/copyright.ftl">

输出

<h1>Sometest</h1>

<p>Yeah.

<hr>

Copyright 2001-2002 JuilaSmith

All rights reserved.

备注:path 可以包含*任意取值,例如:*/copyright.ftl、commons/*/copyright.ftl等,*表示任意路径下的。

该指令具有国际化,如<#include "footer.ftl">, 这个指令的搜索文件的顺序为footer_en_US.ftl,footer_en.ftl,footer.ftl(本地为英国)。

5、import

语法:

<#import path as hash>

备注:

path:模板的路径名.

hash: 在该文件中使用该模板指令的名称。

实例:

<#import"/libs/mylib.ftl" as my>

文件中的使用:

<@my.copyrightdate="1999-2002"/>

6、noparse

语法:

<#noparse>

...

</#noparse>

备注:该指令包含的文件将不被解析成ftl,而是直接输出。

实例:

Example:

--------

<#noparse>

<#list animals as being>

<tr><td>${being.name}<td>${being.price}Euros

</#list>

</#noparse>

输出:

Example:

--------

<#list animals as being>

<tr><td>${being.name}<td>${being.price} Euros

</#list>

7、compress

语法:

<#compress>

...

</#compress>

备注:该指令将会把数据模型中的空格或者html格式去掉。

实例:

<#assign x = "    moo \n\n   ">

(<#compress>

1 2 3   4    5

${moo}

test only

I said, test only

</#compress>)

输出:

(1 23 4 5

moo

testonly

Isaid, test only)

8、escape,noescape

语法:

<#escape identifier asexpression>

...

<#noescape>...</#noescape>

...

</#escape>

备注:该指令对${```}该指令进行了格式化的输出。

备注:

<#escapex as x?html>

Customer Name: ${customerName}

Items to ship:

<#escape x as itemCodeToNameMap[x]>

${itemCode1}

${itemCode2}

${itemCode3}

${itemCode4}

</#escape>

</#escape>

相当于:

CustomerName: ${customerName?html}

Items to ship:

${itemCodeToNameMap[itemCode1]?html}

${itemCodeToNameMap[itemCode2]?html}

${itemCodeToNameMap[itemCode3]?html}

${itemCodeToNameMap[itemCode4]?html}

9、assign

语法:

<#assignname=value>

or

<#assignname1=value1 name2=value2 ... nameN=valueN>

or

<#assignsame as above... in namespacehash>

or

<#assign name>

capture this

</#assign>

or

<#assign name innamespacehash>

capture this

</#assign>

备注:该指令可以创建或者替换变量为页面使用,该变量为最高的层才能被创建或替换,如foo,当foo.bar时将不能被创建或者替换。

name:变量的名称。value:变量的值。namespacehash:import指令中的引用名。

实例:

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

<#assign

seasons = ["winter","spring", "summer", "autumn"]

test = test + 1

>

实例:

<#import"/mylib.ftl" as my>

<#assignbgColor="red" in my>

实例:

<#macromyMacro>foo</#macro>

<#assign x>

<#list 1..3 as n>

${n} <@myMacro />

</#list>

</#assign>

Number of words:${x?word_list?size}

${x}

输出:

Number of words: 6

1 foo

2 foo

3 foo

10、global

语法:

<#global name=value>

or

<#global name1=value1name2=value2 ... nameN=valueN>

or

<#global name>

capture this

</#global>

备注:该指令相似于assign 指令,只是该指令创建的变量可以被所有命名空间使用。

实例:

<#globalx = 1>

<#assignx = 2>

${x}

${.global.x}

</#assign>

输出:

2

1

备注:如果在当前命名空间中,有同名的变量存在,则global 变量将没隐藏,如需访问则:${.global.x}

11、local

语法:

<#localname=value>

or

<#localname1=value1 name2=value2 ... nameN=valueN>

or

<#localname>

capture this

</#local>

备注:该指令类似 assign 指令,但它创建或者替换了本例变量,它只能在macro定义或者function定义中有效。

12、setting

语法:

<#setting name=value>

备注:该指令的设置将影响到该指令设置的地方以下的内容有效。

它提供的设值有:

local:该值为本地的语言,将影响数值、时间等的格式。取值例如:en, en_US,en_US_MAC

number_format:用于将数值转换成String,当没有明确的格式被指定时。

boolean_format:用于将boolean转换成String

date_format,time_format,datetime_format:用于将时间转换成String

time_zone:用于设置时区,如"GMT", "GMT+2", "GMT-1:30", "CET","PST", "America/Los_Angeles"

url_escaping_charset:

classic_compatible:

实例:

${1.2}

<#settinglocale="en_US">

${1.2}

输出:

1,2

1.2

13、User-defineddirective (<@...>)

语法:

<@user_def_dir_expparam1=val1 param2=val2 ... paramN=valN/>

(Note the XML-style / beforethe >)

or if you need loop variables

<@user_def_dir_expparam1=val1 param2=val2 ... paramN=valN ; lv1, lv2, ..., lvN/>

Or the same as the above twobut with end-tag

<@user_def_dir_exp ...>

...

</@user_def_dir_exp>

or

<@user_def_dir_exp ...>

...

</@>

Or all above but withpositional parameter passing

<@ val1, val2, ...,valN/>

...etc.

备注:该指令为调用用户自定义的指令,比如macro

实例:

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

...

<#macro list titleitems>

<p>${title?cap_first}:

<ul>

<#list items as x>

<li>${x?cap_first}

</#list>

</ul>

</#macro>

输出:

<p>Animals:

<ul>

<li>Mouse

<li>Elephant

<li>Python

</ul>

...

实例:

<@myRepeatMacro count=4 ;x, last>

${x}. Something... <#if last> This wasthe last!</#if>

</@myRepeatMacro>

14、macro,nested, return

语法:

<#macro name param1 param2... paramN>

...

<#nested loopvar1, loopvar2, ...,loopvarN>

...

<#return>

...

</#macro>

备注:该指令保存着模板的部分定义,可以用用户指令来调用该指令使用。该指令可以定义在任何地方,不管设定的地方之前或者之后都能使用。也可以指定默认参数的默认值。

实例:

<#macrotest foo bar="Bar" baaz=-1>

Test text, and the params: ${foo}, ${bar},${baaz}

</#macro>

<@testfoo="a" bar="b" baaz=5*5-2/>

<@test foo="a"bar="b"/>

<@test foo="a"baaz=5*5-2/>

<@testfoo="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 img srcextra...>

<img src="/context${src?html}"

<#list extra?keys as attr>

${attr}="${extra[attr]?html}"

</#list>

>

</#macro>

<@imgsrc="/images/test.png" width=100 height=50 alt="Test"/>

输出:

<img src="/context/images/test.png"

alt="Test"

height="50"

width="100"

>

实例:

<#macro do_thrice>

<#nested 1>

<#nested 2>

<#nested 3>

</#macro>

<@do_thrice ; x>

${x} Anything.

</@do_thrice>

输出:

1 Anything.

2 Anything.

3 Anything.

实例:

<#macrotest>

Test text

<#return>

Will not be printed.

</#macro>

<@test/>

输出:

Testtext

15、function,return

语法:

<#functionname param1 param2 ... paramN>

...

<#return returnValue>

...

</#function>

备注:该指令创建了一个方法变量,该指令和macro指令类似,只是return 中必须有返回值。

实例:

<#functionavg x y>

<#return (x + y) / 2>

</#function>

${avg(10,20)}

输出:

15

实例:

<#functionavg nums...>

<#local sum = 0>

<#list numsas num>

<#local sum = sum + num>

</#list>

<#if nums?size != 0>

<#return sum / nums?size>

</#if>

</#function>

${avg(10, 20)}

${avg(10, 20, 30, 40)}

${avg()!"N/A"}

输出:

15

25

N/A

16、flush

语法:

<#flush>

备注:强制输出。虽然FreeMarker会自动的flush 但有些时候要强制flash 的时候可以使用该指令。

17、stop

语法:

<#stop>

or

<#stop reason>

备注:当FreeMarker要强制终止的时候,可以使用该指令,reason 为自定义终止的原因。

18、ftl

语法:

<#ftl param1=value1param2=value2 ... paramN=valueN>

备注:该指令是提供一些参数如果该文件是ftl文件,如果该文件存在则该设置在文件的最开始的地方。

设置的参数有:

encoding:模板的编码,取值为:utf-8、GBK等

strip_whitespace:是否去掉空格。取值为true、false

strip_text:是否去掉最高层的文本,取值为true、false

strict_syntax:是否为严格的语法,取值为true、false

ns_prefixes:

attributes:

19、t,lt, rt

语法

<#t>  -在该行中忽略所有的空格

<#lt>-在该行中忽略左边的所有空格

<#rt>-在该行中忽略右边的所有空格

<#nt>-不去掉该行的空格

实例:

--

1 <#t>

2<#t>

3<#lt>

4

5<#rt>

6

--

输出:

--

1 23

4

5  6

--

20、attempt,recover

语法:

<#attempt>

attempt block

<#recover>

recover block

</#attempt>

备注:该指令是一个错误的捕获,和java 中的 try{}catch 相似。<#recover>是修复指令,代替出错的输出文本。

实例:

Primarycontent

<#attempt>

Optional content: ${thisMayFails}

<#recover>

Ops! The optional content is not available.

</#attempt>

Primarycontent continued

输出:

如果thisMayFails 变量不存在

Primarycontent

Ops! The optional content is not available.

Primarycontent continued

如果thisMayFails 变量存在

Primarycontent

Optional content: 123

Primarycontent continued

21、visit,recurse, fallback

语法:

<#visitnode using namespace>

or

<#visit node>

<#recurse node usingnamespace>

or

<#recursenode>

or

<#recurseusing namespace>

or

<#recurse>

<#fallback>

备注:visit 和recurse 指令是用来递归处理树节点的。在实际中,很多情况下是用来处理xml。

实例:

<#--Assume that nodeWithNameX?node_name is "x" -->

<#visitnodeWithNameX>

Done.

<#macro x>

Now I‘m handling a node that has the name"x".

Just to show how to access this node: thisnode has ${.node?children?size} children.

</#macro>

输出:

NowI‘m handling a node that has the name "x".

Just to show how to access this node: thisnode has 3 children.

Done.

实例:

主体

<#import"n1.ftl" as n1>

<#import"n2.ftl" as n2>

<#-- This will call n2.x(because there is no n1.x): -->

<#visit nodeWithNameXusing [n1, n2]>

<#-- This will call the xof the current namespace: -->

<#visitnodeWithNameX>

<#macro x>

Simply x

</#macro>

n1.ftl

<#macro y>

n1.y

</#macro>

n2.ftl:

<#macro x>

n2.x

<#-- This will call n1.y, becuase itinherits the "using [n1, n2]" from the pending visit call: -->

<#visit nodeWithNameY>

<#-- This will call n2.y: -->

<#visit nodeWithNameY using .namespace>

</#macro>

<#macro y>

n2.y

</#macro>

输出:

n2.x

n1.y

n2.y

Simply x

freemark 语法与示例

时间: 2024-10-05 09:20:48

freemark 语法与示例的相关文章

(转)Java正则表达式的语法与示例

转自:http://www.cnblogs.com/lzq198754/p/5780340.html 概要: Java正则表达式的语法与示例 | |目录 1匹配验证-验证Email是否正确 2在字符串中查询字符或者字符串 3常用正则表达式 4正则表达式语法 1匹配验证-验证Email是否正确 Java | 复制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static void main(String[] args) {     // 要验证的字符串     

[转帖]编写shell脚本所需的语法和示例

编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls.cd.pwd等等.总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动.暂停.停止程序的运行或对计算机进行控制. shell 是

语法创建示例之——CREATE PROCEDURE

1.背景知识 1) flex: The Fast Lexical Analyzer 2) Bison: A general-purpose parser generator 3) C语言 前二者请自行查阅文档吧,中文资料也很多,OSChina上搜索就可以看到它们的介绍 2.过程 首先,有些语言是区分函数与过程的,有些没有,但它们其实没有本质区别,还是一个东西.对于PG来讲,过程就是RETURNS VOID函数,因此CREATE PROCEDURE其实也就是创建一个同义词.我们来看CREATE F

Java正则表达式的语法与示例

概要: | |目录 1匹配验证-验证Email是否正确 2在字符串中查询字符或者字符串 3常用正则表达式 4正则表达式语法 1匹配验证-验证Email是否正确 Java | 复制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static void main(String[] args) {     // 要验证的字符串     String str = "[email protected]";     // 邮箱验证规则     String reg

java正则表达式的语法与示例 (转)

匹配验证-验证Email是否正确 public static void main(String[] args) { // 要验证的字符串 String str = "[email protected]"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}"; // 编译正则表达式 Pattern pattern = Pattern

freemark语法

if 判断: <#if n = 0> ... <#elseif (my_resume.getPhotoName()?substring(0,7))!="http://"> ... <#else> ... </#if> String字符串操作 1.截取字符串      ${str?substring(0,7)} 2.判断是否为空,为空时 给默认值    ${my_resume.getJobFunction1_Name()?default(&

转 - markdown简明语法

Markdown是一种极简的『标记语言』,将文本转为HTML,通常为我大码农所用.其不追求大而全,简洁至上,正所谓不求最贵,只求最好! 本文介绍Markdown基本语法,内容很少,一行语法一行示例,学会后可轻松写出高大上的文档,再也不需要各种编辑器去调文章格式.另外,网上有各平台下的Markdown工具可用,也有在线的,我直接使用sublime搞定,Markdown本来就是为了追求简洁,弄个工具岂不多此一举. 强调 星号与下划线都可以,单是斜体,双是粗体,符号可跨行,符号可加空格 **一个人来到

小书匠语法使用手册

小书匠语法使用手册 小书匠 语法 MARKDOWN 帮助 常用语法 标题 1这是 H1 一级标题 2------ 3这是 H2 二级标题 4====== 5# 这是 H1 一级标题 6## 这是 H2 二级标题 7### 这是 H3 三级标题 8#### 这是 H4 四级标题 9##### 这是 H5 五级标题 10###### 这是 H6 六级标题 11 快捷键: [ctrl + h] 列表 无序列表 1* 项目1 2 * 子项目1.1 3 * 子项目1.2 4 * 子项目1.2.1 5* 项

Oracle procedure 基本语法

转自:http://lorry1113.javaeye.com/blog/513851 关键字: oracle 存储过程 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 (     参数1 IN NUMBER,     参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 2.SELECT INTO STATEMENT   将select查询的结果存入到变量中,可以同时将多个列存储多个变量