>>问题处理 ${}
如果要在模板中出 ${aa}
解决:把“$”当特殊字符传递过来
>> 遍历循环
<#if fs?exists>
<#list fs as field >
<tr>
<td class="bmsInputCaption" width="25%" >${field.nameCn}</td>
<td class="bmsInputContent" width="75%" >
<s:property value="${table}DTO.${field.nameEn}"/>
</td>
</tr>
</#list>
</#if>
>> list中基偶行问题
<#if bookMap?exists>
<#list bookMap?keys as bookKey>
<#if bookKey_index%2 = 0>
<tr class="odd">
<#else>
<tr class="even">
</#if>
>>获取list长度
<#if (post.attachments?size > 0)>
1.输出 ${book.name}
空值判断:${book.name?if_exists },
${book.name?default(‘xxx’)}//默认值xxx
${ book.name!"xxx"}//默认值xxx
日期格式:${book.date?string('yyyy-MM-dd')}
数字格式:${book?string.number}--20
${book?string.currency}--<#-- $20.00 -->
${book?string.percent}—<#-- 20% -->
插入布尔值:
<#assign foo=ture />
${foo?string("yes","no")} <#-- yes -->
第一招:迭代Map
假设你有一个Map,像这样:
-
{"name":"mouse", "price":50 , "weight":30}
{"name":"mouse", "price":50 , "weight":30}
如何来迭代输出?
-
<
#-- 这里模拟了一个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
>
<#-- 这里模拟了一个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
;
name = mouse; price = 50; weight = 30;
第二招:如何判定字符串相等
这个有点小题大作,呵呵,其实很简单
-
<
#-- 定义了一种动物——狗 --
>
-
<
#assign
annimal
=
"Dog"
>
-
-
<
#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"
-
注意:这里使用一个"="-->
-
<
#if
annimal
=
"Dog"
>
-
Wang! Wang!
-
<
#else
>
-
Ga! Ga!
-
</
#if
>
<#-- 定义了一种动物——狗 -->
<#assign annimal = "Dog">
<#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"
注意:这里使用一个"="-->
<#if annimal = "Dog">
Wang! Wang!
<#else>
Ga! Ga!
</#if>
输出结果:
Wang! Wang!
第三招:处理空值
先要说明的是,在freemarker中,如果你试图去访问一个不存在的值(null),或者该值在访问时还没有被初始化,
那么它会毫不犹豫的抛给一个错误,并且立即终止模板的执行过程。为什么这么变态?
如何对付这样的情况?
答案:在它访问这个值失败的时候,给它一个默认的值!嘻嘻……
怎么赋默认值?
用这样的语法:
unsafe_expr!default_expr
或 unsafe_expr!
或 (unsafe_expr)!default_expr
或 (unsafe_expr)!
例子:
-
<
#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"
-
当然"!"后面的这个值可以是一个表达式-->
-
${mouse!"No mouse."}
-
-
<
#-- 给mouse赋值 "Jerry" --
>
-
<
#assign
mouse
=
"Jerry"
>
-
-
<
#-- 再次访问mouse --
>
-
${mouse!"No mouse."}
<#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"
当然"!"后面的这个值可以是一个表达式-->
${mouse!"No mouse."}
<#-- 给mouse赋值 "Jerry" -->
<#assign mouse="Jerry">
<#-- 再次访问mouse -->
${mouse!"No mouse."}
输出结果:
No mouse.
Jerry
另外对于"!"后面没有写任何值的情况,那么它的值可能是空String、空sequence 、空hash。
但是如果你想默认值是0或者false,那么你最好还是显式的指定,因为它不会对你那么友好的(Bad luck!)
还需要注意的是:
-
1. product.color!"red"
-
2. (product.color)!"red"
-
-
这两种写法所表示的含义是不一样的:
-
第一种写法只处理color为空的情况,对于product为空则束手无策。
-
第二种写法则可以同时处理product及color同时(或任意)为空的情况。
1. product.color!"red"
2. (product.color)!"red"
这两种写法所表示的含义是不一样的:
第一种写法只处理color为空的情况,对于product为空则束手无策。
第二种写法则可以同时处理product及color同时(或任意)为空的情况。
插播
,如何判断空值?
语法:unsafe_expr?? 或 (unsafe_expr)?? 返回值为true和false
第四招:几个常用的函数
使用函数的方式就像这样:user?upper_case 简单吧?
字符串函数:
html:
将会把一些特殊的html字符替换掉(比如:把 "<" 替换为"<")
cap_first:
首字母大写
lower_case:
转化为小写
upper_case:
转化为大写
trim:
去掉首尾的空白,包括空格、Tab、回车、换行
例子:
-
<
#-- 定义test值为"Tom & Jerry" --
>
-
<
#assign
test
=
"Tom & Jerry"
>
-
${test?html}
-
${test?upper_case?html}
-
-
输出为:
-
Tom & Jerry
-
TOM & JERRY
<#-- 定义test值为"Tom & Jerry" -->
<#assign test = "Tom & Jerry">
${test?html}
${test?upper_case?html}
输出为:
Tom & Jerry
TOM & JERRY
序列(也就是常说的List或Set等集合)函数:
size:
显示该序列的大小
数学函数:
int:
取整(例如: -1.9?int 返回值是 -1)
- 描述: 循环遍历相关代码
- 大小: 30 KB
分享到:
相关推荐
freemark学习笔记:在阅读freemark官方文档的过程中记录下的一些笔记。包括自己对freemark的理解以及实践中的经验
(userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用<#list table as map></#list>,注意这里的<#list></#list>标签不要和某对其他标签交叉,不...
lblog-新一代个人开源博客 线上地址: 效果展示 ...更新记录 详见 欢迎大家star&fork 有好的建议或意见可以联系我。 我的生产环境是nginx(反代)+tomcat+java8+mysql5.7(必须在5.5以上不包含5.5) in centos7
在学习freemarker时候,个人记录的笔记。用于常见标签的使用语法,以及嵌套标签的使用等。同时针对spring boot 编写了一套代码生成器。直接运行即可使用。具体地址:...
freemark模块_取文件.ec 取mdb表名.ec 频谱.ec 飛狐DLL.ec EdbServer1.0客户端.ec 读.xls文件到高级表格.ec 超级列表框交替色.ec 模拟按键.ec 黑客入侵模块 V1.00.ec 寻找磁盘文件模块 1.0.ec 线程类.ec 超级列表框...
freemark 模块_取文件.ec ftp文件操作模块.ec gdiplus类模块.ec GetStringSize.ec GIF快 照.ec Hex-Dec.ec Hex-Dec1.ec Hex2Dec.ec hide.ec hotkey.ec HTTP.ec http_ec.ec http_ec1.ec HTTP 访问模块 .ec HTTP访问...
freemark 模块_取文件.ec ftp文件操作模块.ec gdiplus类模块.ec GetStringSize.ec GIF快 照.ec Hex-Dec.ec Hex-Dec1.ec Hex2Dec.ec hide.ec hotkey.ec HTTP.ec http_ec.ec http_ec1.ec HTTP 访问模块 .ec HTTP访问...
ACCSEE记录显示到超级列表框模块.ec ACSII加解密模块2.0.ec AD.ec ADO方式填充树型框.ec API操作模块.ec Base64编解码.ec BASE64编解码模块.ec Bios信息.ec BMP滤镜模块.ec BoyChong-神2多方式取IP模块.ec...
ACCSEE记录显示到超级列表框模块.ec ACSII加解密模块2.0.ec AD.ec ADO方式填充树型框.ec anchors.ec API操作模块.ec ASP网络验证商业模块2.3.ec Base64编解码.ec BASE64编解码模块.ec Bios信息.ec BMP滤镜模块.ec ...
操作其它程序中的超级列表框1.0(1.0).zip 查找窗口内所有组件句柄(1.0).zip 查杀程序(1.0).zip 磁盘操作(1.0).zip 超级列表快速排序(2.0).zip 超级列表框补丁1.0(1.0).zip 传奇世界登陆模块(1.9).zip 磁性窗口模块V...
操作其它程序中的超级列表框1.0(1.0).zip 查找窗口内所有组件句柄(1.0).zip 查杀程序(1.0).zip 磁盘操作(1.0).zip 超级列表快速排序(2.0).zip 超级列表框补丁1.0(1.0).zip 传奇世界登陆模块(1.9).zip 磁性...
2005-10-21 15:30 4303 1500 易语言模块大全\ACCSEE记录显示到超级列表框模块.ec 2005-10-21 15:30 7198 2077 易语言模块大全\ACSII加解密模块2.0.ec 2005-10-21 15:30 25389 8592 易语言模块大全\AD.ec 2006-07-20 ...
2005-10-21 15:30 4303 1500 易语言模块大全\ACCSEE记录显示到超级列表框模块.ec 2005-10-21 15:30 7198 2077 易语言模块大全\ACSII加解密模块2.0.ec 2005-10-21 15:30 25389 8592 易语言模块大全\AD.ec 2006-07-...
2005-10-21 15:30 4303 1500 易语言模块大全\ACCSEE记录显示到超级列表框模块.ec 2005-10-21 15:30 7198 2077 易语言模块大全\ACSII加解密模块2.0.ec 2005-10-21 15:30 25389 8592 易语言模块大全\AD.ec 2006-07-20 ...