freemaker简介

来源:互联网 发布:java数字图像处理 pdf 编辑:程序博客网 时间:2024/06/15 16:56

一.声明变量

语法:

//第一种方式

<#assign name=value [innamespacehash]>

用于指定一个名为name的变量,该变量的值为value,in子句用于将创建的name变量放入namespacehash命名空间中.

//第二种方式

<#assign name1=value1 name2=value2 ...nameN=valueN [in namespacehash]>

可以同时创建或替换多个顶层变量。

//第三种方式

<#assign name [in namespacehash]>

</#assign>

指将assign指令的内容赋值给name变量,主要用于创建或替换的变量值是一个复杂的表达式的这种情况。

 

例子:

1、assign替换变量值

<#assign x>

<#list ["星期一","星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]as n>

${n}

</#list>

</#assign>

${x}

代码执行输出:

星期一星期二 星期三 星期四 星期五 星期六 星期天

 

2、assign迭代Map

<#-- 这里模拟了一个Map集合,定义了三对键值-->

<#assign h ={"name":"mouse", "price":50,"weight":30}>

<#-- h?keys 调用了一个包装类的方法,将Map的key取出赋值 -->

<#assign keys = h?keys>

<#-- ${h[key]} 访问到了Map中的value属性 -->

<#list keys as key>${key} =${h[key]}; </#list>

执行输出:

name = mouse; price = 50; weight = 30;

二.循环语句

语法:

<#list data.list asstudent >

   ${student.name}

</#list>

 

//遍历MAP

<#list map?keys as k>

     <optionvalue="${k}">${map[k]}</option>

</#list>

 

1、name是list循环的时候取的一个循环变量.相关指令如下:

2、item_index:当前变量的索引值

3、item_has_next:是否存在下一个对象

4、break:跳出迭代

 

方式

1. 获取或者设置list相关信息

<#list animals as ani>

    <!-- 获取list的size长度 -->

    <div>${list?size}<div>

    <!-- 获取list遍历中的下标序号 -->

    <div>${ani_index}<div>

    <!-- 遍历list的值 -->

   <div>${ani.name}${ani.price}<div>

    <!-- 是否是最后一个元素 -->

    <#if !ani_has_next>

        ${ani.name}

    </#if>

</#list>

 

2. list排序

//升序:sort_by()

<#list list?sort_by("字段") as x>

</#list>

//降序:sort_by()?reverse

<#list list?sort_by("字段")?reverse as x>

</#list>

三.控制语句

If语句:

<#if arg.status = “now”>

符合条件一

<#elseif arg.status =“all”>

符合条件二

</#if>

 

Switch语句:

<#switch value>

<#caserefValue>...<#break>

<#caserefValue>...<#break>

<#default>...

</#switch>

四.三元表达式

${(arg.zhuanyefenlei1 != null)? string('selected','')}

五.数据的操作

1、字符串转数字

${“111.11”?number}结果为111.11

2、string用于将数字转换为字符串

Freemarker中预订义了三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换。

例如:<#assign tempNum=20>

${tempNum?string.number}或${tempNum?string(“number”)}结果为20

${tempNum?string.currency}或${tempNum?string(“currency”)}结果为¥20.00

${tempNum?string. percent}或${tempNum?string(“percent”)}结果为2,000%

 

3、操作布尔值

string 用于将布尔值转换为字符串输出

${foo?string(“yes”,”no”)}如果布尔值是true,那么返回“yes”,否则返回no。

 

4、split使用指定的分隔符将一个字符串拆分为一组字符串

${”This|is|split”?split(“|”)}

 

5、replace用于将字符串中的一部分从左到右替换为另外的字符串。${“strabg”?replace(“ab”,”in”)}结果为string

 

6、contains 判断字符中是否包含某个子串。返回布尔值

${“string”?contains(“ing”)?string}结果为true
注意:布尔值必须转换为字符串才能输出

 

7、lower_case将字符串转为小写

${“STRING”?lower_case}结果为string

 

9、length返回字符串的长度 ${“string”?length}结果为6

 

10、substring(start,end)从一个字符串中截取子串
start:截取子串开始的索引,start必须大于等于0,小于等于end
end: 截取子串的长度,end必须大于等于0,小于等于字符串长度,如果省略该参数,默认为字符串长度。
例子:
${‘str’?substring(0)}结果为str
${‘str’?substring(1)}结果为tr
${‘str’?substring(2)}结果为r
${‘str’?substring(3)}结果为
${‘str’?substring(0,0)}结果为
${‘str’?substring(0,1)}结果为s
${‘str’?substring(0,2)}结果为st
${‘str’?substring(0,3)}结果为str

1、.cap_first 将字符串中的第一个单词的首字母变为大写。
${‘str‘?cap_first}结果为Str


12、uncap_first将字符串中的第一个单词的首字母变为小写。
${‘Str’?cap_first}结果为str

 

13、capitalize将字符串中的所有单词的首字母变为大写
${‘str’? capitalize}结果为STR

 

15、ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。
${“string”?ends_with(“ing”)?string} 返回结果为true
注意:布尔值必须转换为字符串才能输出

 

16、html 用于将字符串中的<、>、&和“替换为对应得&lt;&gt;&quot:&amp

 

17、index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。

Start参数用于指定从字符串的那个索引处开始搜索,start为数字值;如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为0。
${“string”?index_of(“in”)结果为3
${“string”?index_of(“ab”)结果为-1

六.时间转换

1.date,time,datetime将字符串转换为日期
例如:

<#assigndate1=”2009-10-12”?date(“yyyy-MM-dd”)>
<#assign date2=”9:28:20”?datetime(“HH:mm:ss”)>
<#assign date3=” 2009-10-12 9:28:20”?datetime(“HH:mm:ss”)>
${date1}结果为2009-10-12
${date2}结果为9:28:20
${date3}结果为2009-10-12 9:28:20
注意:如果指定的字符串格式不正确将引发错误。

七.include指令

javaFreemarker中include指令用于导入文件,它可以在模版中插入其他的静态文件,或者是freemarker模版,这里通常引入的都是项目的公共部分,比如说网站的头部,以及版权信息等等。

语法:

<#include path>

<#include path options>

path: 要包含文件的路径。可以使用相对路径和绝对路径。通常使用/(斜杠)来分割路径成分。

options:一个或多个这样的选项(encoding=encoding,parse=parse)

encoding:算作是字符串的表达式。被包含文件从包含的文件继承的编码方式。(ISO-8859-2、UTF-8、GB2312)。

Parse:算作是布尔值的表达式。默认是true。如果它为真,那么被包含的文件将会当做FTL来解析,否则整个文件将被当成简单文本来处理。(也就是说不会在其中查找FreeMarker结构)

ignore_missing: 算作是布尔值的表达式

八.import指令

javaFreemarker中import指令类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件。

语法:

<#import path as hash>

<#import "lib/my_test.ftl" ascom>

上面例子它会为lib/my_test.ftl创建一个新的哈希表变量,就是空的命名空间com,my_test.ftl这个模板的所有变量放置在com的Map对象中。

例子:

//inc1.ftl

<#assign username="刘德华">

//inc2.ftl

<#assign username="张学友">

//import将inc1.ftl与inc2.ftl导入

九.setting指令

语法:

<#setting name=value>

name的取值范围如下:

locale:该选项指定该模板所用的国家/语言选项

number_format:指定格式化输出数字的格式

boolean_format:指定两个布尔值的语法格式,默认值是true,false

date_format,time_format,datetime_format:指定格式化输出日期的格式

time_zone:设置格式化输出日期时所使用的时区

例子:

<#setting locale="en_US">

${1.2}执行输出:

1,2

1.2

十.macro自定义指令详解

javaFreemarker中macro(宏)可以用于实现自定义指令,通过使用自定义指令,可以将一段模板片段定义成一个用户指令。

 

语法:

<#macro name param1 param2 ...paramN>

...

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

...

<#return>

...

</#macro>

name:指定的是该自定义指令的名字,使用自定义指令时可以传入多个参数

paramX:指定使用自定义指令时报参数,使用该自定义指令时,必须为这些参数传入值

nested:输出使用自定义指令时的中间部分

nested指令中的循环变量:这此循环变量将由macro定义部分指定,传给使用标签的模板

return:可用于随时结束该自定义指令.

 

例子:

1. macro简单例子

<#macro test foo bar="Bar"baaz=-1>Test 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 and the params: a, b, 23Test and the params: a, b, -1Test and the params: a, Bar, 23Test and the params: a, Bar, -1

2. macro自定义循环输出的宏

<#macro list title items><p>${title?cap_first}:<ul>      <#list items as x>        <li>${x?cap_first}      </#list></ul></#macro><@list items=["mouse","elephant", "python"] title="Animals"/>执行输出:<p>Animals:<ul>        <li>Mouse        <li>Elephant        <li>Python</ul>

3. macro包含nested的宏

<#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.52. 13. 1.54. 2 Last!

4. macro定义输出html的自定义指令

//common.ftl 将一个HTML页面模板定义成一个page指令,则可以在其他页面中如此page指令<#macro page title><html><head>  <title>FreeMarker示例页面 -${title?html}</title></head><body>  <h1>${title?html}</h1>  <#nested> //用于引入用户自定义指令的标签体</body></html></#macro>//引用自定义的page指令<#import "/common.ftl" ascom><@com.page title="booklist"><u1><li>spring</li><li>j2ee</li></ul></@com.page>

总结

1. macro是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量。

2. 在macro进行自定义指令中可以在宏变量之后定义参数,调用宏时,与使用FreeMarker的其他指令类似,只是使用@替代FTL标记中的#。