Freemarker常用技巧(一)

摘要:
3.日期格式和布尔类型,转换为字符串类型${lastUpdate?string}//输出结果:yes4按升序排序_by()˂#listlist?Html}假设字符串测试存储“Tom&Jerry”,则输出为:Tom&JerryTOM&JERRY${sessions?Cap_first}假设sessions存储序列“冬季”、“春季”、“夏季”和“秋季”,则上述输出将为:4SpringHorse8顶级变量所谓的顶级变量是直接放置在数据模型中的值。Maproot=newHashMap();根put;//名称是顶级对象。对于顶级变量,可以直接使用${variableName}输出变量值。9设置连接运算符。集合连接操作将两个集合连接到一个新集合中。连接集合的运算符是“+”${x}//输出结果如下:一二三四五六十算术运算符舍入运算${(x/2)?

1 截取字符串
有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度
<#if title.content?length lt 8>
           <a href>${title.content?default("")}</a>
      <#else>
           <a href title="${title.content}">${title.content[0..3]?default("")}...</a>
</#if>
意思就是如果这个字符串的长度小于8,那么就正常显示,反之则取4位
注意:常用的比较运算符
=(==):判断两个值是否相等
!=:不相等
>(gt):判断左边是否大于右边
>=(gte):
<(lt):
<=(lte):
2 连接字符串
${"Hello," + user + "!"} //输出结果为:hello,swiftlet.net!

3 日期格式和boolean类型,转化为string类型
${lastUpdate?string("yyyy-MM-dd HH:mm:ss")}      
输出结果如下:
2003-04-08 21:24:44
<#assign foo=true/>
${foo?string("yes","no")} //输出结果:yes

4 排序
升序用sort_by()
<#list list?sort_by("字段") as x>
</#list>
降序用sort_by()?reverse
<#list list?sort_by("字段")?reverse as x>
</#list>

5 去空格
${xx?trim}

6 数值精度控制
mX:小数部分最小X位。
MX:小数部分最大X位。
<#assign x=2.582/>
<#assign y=4/>
#{x; M2}//2.58
#{y; M2}//4
#{x; m1M2}//2.58
#{y; m1M2}//4.0

7 内置函数

html:字符串中所有的特殊HTML字符都需要用实体引用来代替(比如<代替&lt;)
cap_first:字符串的第一个字母变为大写形式
lower_case:字符串的小写形式
upper_case:字符串的大写形式
trim:去掉字符串首尾的空格

序列使用的内建函数:
size:序列中元素的个数

数字使用的内建函数:
int:数字的整数部分(比如-1.9?int就是-1)9>.空值运算符

length:字符串的长度
string :把其他格式的数据,转化为string类型
${test?html}
${test?upper_case?html}

假设字符串test存储”Tom & Jerry”,那么输出为:

Tom &amp; Jerry
TOM &amp; JERRY

${seasons?size}
${seasons[1]?cap_first}

${"horse"?cap_first}
假设seasons存储了序列"winter", "spring", "summer", "autumn",那么上面的输出将会是:
4
Spring
Horse
                    
8 顶层变量
所谓顶层变量就是直接放在数据模型中的值。
Map root = new HashMap();
root.put("name","admin");//name是一个顶层对象
对于顶层变量,直接使用${variableName}来输出变量值
       
9 集合连接运算符
集合连接运算是将两个集合连接成一个新的集合,连接集合的运算符是'+'.
<#list ["一","二","三"] + ["四","五","六"] as x>
    ${x}
</#list>
//输出结果如下:
一二三四五六

10 算术运算符
取整运算
<#assign x=5>
${(x/2)?>int}//2
${1.1?int}//1
${1.999?int} //1
${-1.1?int}//-1

免责声明:文章转载自《Freemarker常用技巧(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安装RabbitMQ[ PyQt入门教程 ] PyQt5基本控件使用:单选按钮、复选框、下拉框、文本框下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据加密之RijndaelManaged加密

1 #region RijndaelManaged加密 2 /// <summary> 3 /// 加密数据 4 /// </summary> 5 /// <param name="Text">要加密的内容</param>...

string中的CopyonWrite技术

在谈这项技术之前,我们先来了解一下string类内存分配。string类有一个私有成员,其类型是一个char*,记录用户从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存。因为是从堆上分配内存,所以string类在维护这块内存上是格外小心的,string类在返回这块内存地址时,只返回const char*,也就是只读的,如果你要写,你只能通过str...

浅析Android动画(二),属性动画高级实例探究

转载请注明出处!http://www.cnblogs.com/wondertwo/p/5312482.html ObjectAnimator实现属性动画 为了写好Android动画这几篇博客,在动笔之前我是下过很大决心的,我对自己的要求是尽量把一个小知识点写清楚写明白,说白了就是相对于大而全的长篇大论,我更倾向于去写小而美的博客!为了保证在高产的同时能坚...

Linux shadow文件中密码的加密方式

1)查看shadow文件的内容 cat/etc/shadow 可以得到shadow文件的内容,限于篇幅,我们举例说明: root:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.:14838:0:99999:7::: 其格式为: {用户名}:{加密后的口令密码}:{口令最后修改时间距原点(1970-1-1)的天数}:{口令最小修改间隔...

C++第四十篇 -- 研究一下Windows驱动开发(三)-- NT式驱动的基本结构

对于NT式驱动来说,主要的函数是DriverEntry例程、卸载例程及各个IRP的派遣例程。 一、驱动加载过程与驱动入口函数(DriverEntry) 和编写普通应用程序一样,驱动程序有个入口函数,也就是首先被执行的函数。这个函数通常被命名为DriverEntry。该函数的原型为: NTSTATUS DriverEntry( _In_ PDRIVE...

【Python之路】特别篇--ECMA对象、DOM对象、BOM对象

ECMA对象从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。 ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。 var o = new Object(); 对象的概念与分类: 由ECMAScript定义的本地对象.独立于宿主环境的 ECMAS...