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 用于将字符串中的<、>、&和“替换为对应得<>":&
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标记中的#。
- freemaker简介
- FreeMaker教程(一)-----FreeMaker简介
- FreeMaker
- freemaker
- FreeMaker
- freemaker
- freemaker
- freemaker
- freemaker
- Freemaker
- FreeMaker
- freemaker
- FreeMaker
- Freemaker
- FreeMaker开篇
- freemaker基础
- Freemaker 特性
- FreeMaker第一步
- oracle安装 新手教程
- 一分钟了解“英语表示区分”
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 线段的裁剪算法
- freemaker简介
- 【转载】Pip in IronPython 2.7.5
- NumPy v1.13
- Node.js学习(二):创建第一个Node程序
- 阿里云windows 2012服务器部署java web程序教程
- 二维数组的转制
- 做AI必须要知道的十种深度学习方法
- Microsoft Word 2010
- Java作业杨枝12.2/12.3