本文主要是介绍freemark标签的使用案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这样会遇到一个问题,当数据超过3位的时候,freemarker会自动用逗号截取 格式如:2,008
如何解决呢?
1> 加.toString(),如:${(userId).toString()}
2> 加?c,如:${(userId)?c}
3> freemarker配置文件freemarker.properties加上number_format=#
判断是否为空:
1.<#if xx[0]?exists>
2.<#if xx??>
3.<#if xx?default("xxx")>
不然当没有数据的时候 ,很大很大一个黄页就等着你了
序列号:
有时候页面的table需要在第一列显示序号 只需要使用 _index 即可 不过是从0开始的 你可以+1 比如:
<#list list as a>
${a_index+1}
</#list>
数据类型转换:
${xx?string} //字符串
${xx?number}//整数
${xx?currency}//小数
${xx?percent}//百分比
截取字符串长度:
有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的列子就可以自定义显示的长度
< lt. <= lte. > gt. >= gte
<#if jstbqkVO.gzdd?length lt 8>
<a href>${jstbqkVO.gzdd?default("")}</a>
<#else>
<a href title="${jstbqkVO.gzdd}">${jstbqkVO.gzdd[0..3]?default("")}...</a>
</#if>
意思就是如果这个字符串的长度小于8,那么就正常显示,反之则取4位
嵌套list:
很多时候,数据库里存储的都是编号,而页面上需要显示的汉字,而且不在一张表里,看列子
<#list jsskList as jsskVO>
<#list kcList as kcVO>
<#if kcVO.kch=jsskVO.kch> (kcVO里有编号和名称,而jsskVO里只有编号)
${kcVO.kcm}
</#if>
</#list>
</#list>
排序:
1.升序.sort_by()
<#list list?sort_by("字段") as x>
</#list>
2.降序.sort_by()?reverse
<#list list?sort_by("字段")?reverse as x>
</#list>
去空格:
${xx?trim}
格式化日期:
${date?string("yyyy-MM-dd HH:mm:ss ")}
${date?string("yyyyMMdd ")}
- 一、常用语法
- EG.一个对象BOOK
- 1、输出 $...{book.name}
- 2、空值判断:$...{book.name?if_exists },
- $...{book.name?default(‘xxx’)}//默认值xxx
- $...{ book.name!"xxx"}//默认值xxx
- 3、日期格式:$...{book.date?string('yyyy-MM-dd')}
- 4、数字格式:$...{book?string.number}--20
- $...{book?string.currency}--<#-- $20.00 -->
- $...{book?string.percent}—<#-- 20% -->
- 5、插入布尔值:
- <#assign foo=true />
- $...{foo?string("yes","no")} <#-- yes -->
- 二、内置方法
- 1、数字型
- <#assign answer=42/>
- $...{answer}
- $...{answer?string} <#-- the same as $...{answer} -->
- $...{answer?string.number}
- $...{answer?string.currency}
- $...{answer?string.percent}
- <#setting number_format="0.###E0"/>
- $...{12345?string("0.####E0")}
- $...{answer?string("number")} 等同于:$...{answer?string.number}.
- 2、日期型:
- 预定义格式包括:short ,middle和long。
- $...{openingTime?string.short}
- $...{openingTime?string.medium}
- $...{openingTime?string.long}
- 组合使用:$...{lastUpdated?string.short_long}
- $...{lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
- 3、逻辑型
- foo?string
- foo?string("yes", "no")
- 4、序列的内置方法:
- first
- last
- seq_contains
- $...{x?seq_contains("blue")?string("yes", "no")}
- seq_index_of
- seq_last_index_of
- reverse
- size
- sort
- sort_by
- 多层次的hash排序
- <#assign members = [
- ...{"name": ...{"first": "Joe", "last": "Smith"}, "age": 40},
- ...{"name": ...{"first": "Fred", "last": "Crooger"}, "age": 35},
- ...{"name": ...{"first": "Amanda", "last": "Fox"}, "age": 25}]>
- Sorted by name.last:
- <#list members?sort_by(['name', 'last']) as m>
- - $...{m.name.last}, $...{m.name.first}: $...{m.age} years old
- </#list>
- chunk:将一个序列分解成几个序列。
- <#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
- <#list seq?chunk(4) as row>
- <#list row as cell>$...{cell} </#list>
- </#list>
- <#list seq?chunk(4, '-') as row>
- <#list row as cell>$...{cell} </#list>
- </#list>
- chunk经常用于分栏或者表格输出的格式。
- 5、hash内置方法:
- keys:
- values:
- 三、序列
- 由逗号分隔的变量列表,由方括号限定,类似java中的一维数组
- <#assign seq = ["winter", "spring", "summer", "autumn"]>
- <#list seq as x>
- ${x_index + 1}. ${x}
- <#if x_has_next>,
- </#list>
- 输出
- 1. winter,
- 2. spring,
- 3. summer,
- 4. autumn
- 四、Hashes(散列)
- 由逗号分隔的键-值列表,由大括号限定,键和值之间用冒号分隔:{"name":"green mouse", "price":150},键和值都是表达式,但是键必须是字符串。
- <#assign ages = ...{"Joe":23, "Fred":25} + ...{"Joe":30, "Julia":18}>
- Joe is $...{ages.Joe}
- Fred is $...{ages.Fred}
- Julia is $...{ages.Julia}
- 结果:
- - Joe is 30
- - Fred is 25
- - Julia is 18
- 五、freemarker的空值和默认值
- ${user?if_exists}
- ${user?default('your name')}
- 判断对象是不是null
- <#if mouse?exists>
- Mouse found
- <#else>
- 或<#if book.name?? >
- Mouse found
- </#if>
- list 空值判断 <#if bookList?size = 0>
- 六、算术运算
- 比较操作符-<#if expression>...</#if>
- 1.)使用=(或==,完全相等)测试两个值是否相等,使用!= 测试两个值是否不相等
- 2.)=和!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 = "1">会引起错误
- 3.)Freemarker是精确比较,所以"x"、"x "和"X"是不相等的
- 4.)对数字和日期可以使用<、<=、>和>=,但不能用于字符串
- 5.)由于Freemarker会将>解释成FTL标记的结束字符,所以对于>和>=可以使用括号来避免这种情况,例如<#if (x > y)>,另一种替代的方法是,使用lt、lte、gt和gte来替代<、<=、>和>=
- 逻辑操作符-&&(and)、||(or)、!(not),只能用于布尔值,否则会产生错误
- <#if x < 12 && color = "green">
- We have less than 12 things, and they are green.
- </#if>
- <#if !hot> <#-- here hot must be a boolean -->
- It's not hot.
- </#if>
- 内置函数-用法类似访问hash(散列)的子变量,只是使用"?"替代".",例如:user?upper_case
- 下面列出常用的一些函数:
- 对于字符串
- html-对字符串进行HTML编码
- cap_first-使字符串第一个字母大写
- lower_case-将字符串转换成小写
- trim-去掉字符串前后的空白字符
- 对于Sequences(序列)
- size-获得序列中元素的数目
- 对于数字
- int-取得数字的整数部分(如-1.9?int的结果是-1)
- 例一:
- <#-- test的值为Tom & Jerry -->
- $...{test?html}
- $...{test?upper_case?html}
- 结果:
- Tom & Jerry
- TOM & JERRY
- 例二:
- <#-- seasons的值为"winter", "spring", "summer", "autumn" -->
- $...{seasons?size}
- $...{seasons[1]?cap_first} <#-- left side can by any expression -->
- $...{"horse"?cap_first}
- 结果:
- 4
- Spring
- Horse
- 方法的调用
- $...{repeat("What", 3)}
- $...{repeat(repeat("x", 2), 3) + repeat("What", 4)?upper_case}
- 结果:
- WhatWhatWhat
- xxxxxxWHATWHATWHATWHAT
- 操作符优先顺序
- 后缀 [subvarName] [subStringRange] . (methodParams)
- 一元 +expr、-expr、!
- 内建 ?
- 乘法 *、 / 、%
- 加法 +、-
- 关系 <、>、<=、>=(lt、lte、gt、gte)
- 相等 =、!=
- 逻辑 &&
- 逻辑 ||
- 数字范围 ..
- 三.) Interpolation:由$...{...}或#...{...}两种类型,输出计算值,可以定义输出的格式
- 例一:
- <#setting number_format="currency"/>
- <#assign answer=42/>
- $...{answer}
- $...{answer?string} <#-- the same as $...{answer} -->
- $...{answer?string.number}
- $...{answer?string.currency}
- $...{answer?string.percent}
- 结果:
- $42.00
- $42.00
- 42
- $42.00
- 4,200%
- 例二:
- $...{lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
- $...{lastUpdated?string("EEE, MMM d, ''yy")}
- $...{lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}
- 结果:
- 2003-04-08 21:24:44 Pacific Daylight Time
- Tue, Apr 8, '03
- Tuesday, April 08, 2003, 09:24:44 PM (PDT)
- 例三:
- <#assign foo=true/>
- $...{foo?string("yes", "no")}
- 结果:
- yes
- 例四:
- <#-- x is 2.582 and y is 4 -->
- #...{x; M2} <#-- 2.58 -->
- #...{y; M2} <#-- 4 -->
- #...{x; m1} <#-- 2.6 -->
- #...{y; m1} <#-- 4.0 -->
- #...{x; m1M2} <#-- 2.58 -->
- #...{y; m1M2} <#-- 4.0 -->
- 说明:mX-小数部分最小X位;MX-小数部分最大X位。
- 四.) 注释:<#--和-->
- 下面是一个常用的模板例子:
- <p>We have these animals:
- <table border=1>
- <tr><th>Name<th>Price
- <#list animals as being>
- <tr>
- <td>
- <#if being.size = "large"><b></#if>
- $...{being.name}
- <#if being.size="large"></b></#if>
- <td>$...{being.price} Euros
- </#list>
- </table>
- <#include "/copyright_footer.html">
- 注意点:
- 1.) FreeMarker是区分大小写的;
- 2.) FTL标记不能位于另一个FTL标记内部,例如:<#if <#include 'foo'>='bar'>...</if>;
- 3.) $...{…}只能在文本中使用;
- 4.) 多余的空白字符会在模板输出时去除;
- 5.) 如果使用的指令不存在,会产生一个错误消息。
- <#-- x的值设定为5 -->
- $...{x * x - 100}
- $...{x / 2}
- $...{12 % 10}
- 结果:
- -75
- 2.5
- 2
- 注意: 操作符两边必须是数字;使用"+"时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串。
- 使用内建的指令int获得整数部分:
- $...{(x/2)?int}
- $...{1.1?int}
- $...{1.999?int}
- $...{-1.1?int}
- $...{-1.999?int}
- 结果:
- 2
- 1
- 1
- -1
- -1
这篇关于freemark标签的使用案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!